Tôi có một lớp sự kiện whitch kéo dài JPanel:Xác định thành phần JPanel đã nhấp trong Trình ghi chuột. xử lý
public class ButtonPanel extends JPanel {
private label;
public ButtonPanel() {
label=new JLabel("waiting for click");
add(label);
}
public void setButtonText() {
label.setText("just clicked");
}
}
Tôi có một vài trường hợp mà lớp đó sẽ được thêm vào JFrame. Tôi muốn tạo một instanse của lớp MouseAdapter và sau đó thêm chúng như một người nghe chuột cho tất cả các thành phần ButtonPanel trên JFrame của tôi. Tôi quan tâm:
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);
Lớp MouseAdapterMod Tôi muốn tách biệt với nhau và định vị trong gói riêng của nó. Nó nên trông như thế này:
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
}
}
Vì vậy, vấn đề là tôi không biết làm thế nào để thực hiện phương pháp mouseClicked để làm cho nó xác định của ButtonPanel tạo sự kiện này và gọi tương ứng với thành phần setButtonText() phương pháp. Có ai biết làm thế nào để làm điều đó?
Tôi biết rằng tôi có thể đạt được điều này bằng cách bao gồm chức năng xử lý sự kiện trong lớp ButtonPanel, nhưng đó không phải là cách phù hợp với tôi, vì tôi muốn giữ cấu trúc lớp như tôi đã mô tả ở trên và chỉ có một thể hiện của lớp MouseAdapterMod xử lý tất cả các ButtonPanels.
Kudos cho đoạn cuối cùng của bạn. –