能否有人请向我解释为什么这一段代码打印出来,当你将鼠标移到该复选框控制台?什么是“变”事件发生?

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)`,你不会得到任何事件的鼠标移动。

的复选框(甚至只是复选框模型)的状态的变化,这取决于其是否具有鼠标移到与否。因此,一个状态改变事件应当可以预料的。

所以,刚回来检查,看看有什么注明复选框并相应更新。这是更好地直去的模型,而不是使用“臃肿”组件接口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top