Mam klasy Event whitch rozszerza JPanel:Określa kliknięcie komponentu JPanel w narzędziu MouseListener. obsługi
public class ButtonPanel extends JPanel {
private label;
public ButtonPanel() {
label=new JLabel("waiting for click");
add(label);
}
public void setButtonText() {
label.setText("just clicked");
}
}
Mam kilka wystąpień tej klasy, która jest dodawana do JFrame. Chcę utworzyć jedną instancję klasy MouseAdapter, a następnie dodać ją jako detektor myszy do wszystkich składników ButtonPanel w mojej ramce JFrame. I meen:
ButtonPanel butt1 = new ButtonPanel();
ButtonPanel butt2 = new ButtonPanel();
ButtonPanel butt3 = new ButtonPanel();
//... here goes code which add ButtonPanels to JFrame
MouseAdapterMod mam = new MouseAdapterMod();
butt1.addMouseListener(mam);
butt2.addMouseListener(mam);
butt3.addMouseListener(mam);
Klasa MouseAdapterMod Chcę być oddzielone od innych i zlokalizować w jego własnym opakowaniu. powinno to wyglądać tak:
public class MouseAdapterMod extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
//here goes the code of calling setButtonText method of ButtonPanel component on which the event had occurred
}
}
Tak więc problem jest to, że nie wiem jak zaimplementować metodę mouseClicked, aby określić, które z ButtonPanel generowania zdarzenia i wywołać odpowiedni do tego składnika setButtonText metoda(). Czy ktoś wie, jak to zrobić?
Wiem, że mogę to osiągnąć przez włączenie funkcji obsługi zdarzeń w klasie ButtonPanel, ale to nie jest odpowiedni sposób dla mnie, ponieważ chcę zachować strukturę klas, jak opisano powyżej i mam tylko jedno wystąpienie klasy MouseAdapterMod dla obsługa wszystkich ButtonPaneli.
Kudos do ostatniego akapitu. –