【发布时间】:2010-11-21 02:57:29
【问题描述】:
有人可以向我解释为什么当您将鼠标移到复选框上时这段代码会打印到控制台吗?发生的“改变”事件是什么?
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)
并通知我的侦听器,而动作侦听器无法做到这一点。那么有没有办法禁用这个“鼠标悬停”事件或我可以实现我的监听器的另一种方式?
【问题讨论】:
-
奇怪,我认为使用
setSelected会触发更改侦听器。我一定在想别的事。 -
如果我在 Mac OSX 上的 Java 5 上运行它,我不会将鼠标悬停在事件上。
-
@jeef3:setSelected 确实会触发更改事件。这就是我使用它的原因。问题是鼠标悬停也会触发更改事件:)
-
@banjollity: 看起来像是 windows-mac jvm 的区别...
-
确实,在我的 Mac 上,当我将鼠标移到复选框上时,打印语句不会执行。我在下面看到一个关于将“翻转”设置为
false的答案以及关于监听不同事件的其他答案,但显然 Mac 和 Windows 上的默认设置之间存在一些差异。今天我遇到了这个差异,因为我的客户的计算机是 Windows,当他的光标移到一个复选框上时,我们的应用程序中发生了一些我没想到的事情..
标签: java events event-handling checkbox listener