Tại trình xử lý sự kiện, bạn có thể gửi sự kiện đến thành phần chính.
Là myEvent
xử lý sự kiện tranh cãi chức năng:
Component source=(Component)myEvent.getSource();
source.getParent().dispatchEvent(myEvent);
Nhưng giải pháp này ngụ ý tạo ra một EventListener mới cho mỗi phần tử thêm vào.
Vì vậy, bạn có thể tạo một handler sự kiện duy nhất và tái sử dụng nó, thêm nó vào tất cả các trẻ em được lựa chọn, như thế này:
final Container parent=this; //we are a the parent container creation code
MouseListener myCommonListener=new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
parent.dispatchEvent(e);
}
@Override
public void mouseEntered(MouseEvent e) {
parent.dispatchEvent(e);
}
@Override
public void mouseExited(MouseEvent e) {
parent.dispatchEvent(e);
}
@Override
public void mousePressed(MouseEvent e) {
parent.dispatchEvent(e);
}
@Override
public void mouseReleased(MouseEvent e) {
parent.dispatchEvent(e);
}
};
JLabel label=new JLabel("This is the first Label");
label.addMouseListener(myCommonListener);
JLabel label2=new JLabel("This is the second Label");
label2.addMouseListener(myCommonListener);
//... and so on
Nguồn
2010-09-29 06:26:38
Tại sao bạn cần phải làm điều này (ví dụ)? – Pete
Tôi có các đối tượng có nhiều nhãn, có thể kéo được ở bất cứ nơi nào chúng thực sự được nhấp vào lần đầu tiên. Ngay bây giờ chúng chỉ có thể kéo được khi tôi nhấp vào nền của phần tử, không phải bất kỳ nhãn nào bên trong. – viraptor