Có thể một số người vui lòng giải thích cho tôi tại sao đoạn mã này in ra bàn điều khiển khi bạn di chuột qua hộp kiểm? Sự kiện "thay đổi" diễn ra như thế nào?Trình nghe thay đổi JCheckbox được thông báo về chuột qua các sự kiện
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame();
JCheckBox c = new JCheckBox("Print HELLO");
c.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.out.println("HELLO");
}
});
f.getContentPane().add(c);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
LƯU Ý: Tôi không sử dụng một người biết lắng nghe hành động bởi vì trong chương trình của tôi tôi muốn để có thể làm:
checkBox.setSelected(boolean)
và có người nghe tôi thông báo, mà không thể được thực hiện với một người nghe hành động. Vậy có cách nào để vô hiệu hóa sự kiện "di chuột qua" này hay cách khác để tôi có thể triển khai trình nghe của mình không?
Rất tiếc, tôi nghĩ sử dụng 'setSelected' sẽ kích hoạt người nghe thay đổi. Tôi phải nghĩ về điều gì đó khác. – jeef3
Nếu tôi chạy nó trên Java 5 trên Mac OSX, tôi không nhận được chuột qua các sự kiện. – banjollity
@ jeef3: setSelected DOES kích hoạt sự kiện thay đổi. Đó là lý do tại sao tôi đang sử dụng nó. Vấn đề là sự kiện thay đổi cũng được kích hoạt bởi chuột qua chuyển động :) –