JCheckBox的变化听众得到了事件通知鼠标
-
19-09-2019 - |
题
能否有人请向我解释为什么这一段代码打印出来,当你将鼠标移到该复选框控制台?什么是“变”事件发生?
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);
}
}
请注意:我没有,因为在我的计划,我想能够做到用一个动作监听:
checkBox.setSelected(boolean)
和有我的听众通知,不能用一个动作监听器来完成。那么,有没有办法“鼠标悬停”事件或其他方式,我可以实现我的听众?禁用此
解决方案
您获得鼠标事件聚焦获得/丢失表示改变到组件的状态。
相反,你可以使用一个ItemListener,这将给你ItemEvents。
当该事件发生时用于实现的ItemListener接口的对象获取该一个ItemEvent。侦听器不必处理个别鼠标移动和鼠标点击的细节,而是可以处理一个“有意义”(语义)事件,如“项目选择”或“取消选择项目”。
您可以将它添加到与AbstractButton类的可的addItemListener()方法的复选框。只是与此替换addChangeListener:
c.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.err.println(e.getStateChange());
}
});
其他提示
使用c.setRolloverEnabled(false
)`,你不会得到任何事件的鼠标移动。
的复选框(甚至只是复选框模型)的状态的变化,这取决于其是否具有鼠标移到与否。因此,一个状态改变事件应当可以预料的。
所以,刚回来检查,看看有什么注明复选框并相应更新。这是更好地直去的模型,而不是使用“臃肿”组件接口。
不隶属于 StackOverflow