在尝试学习 JButton 事件时,我因为一个问题而感到困惑。我正在使用的示例代码在这里。
代码如下:
jb.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
System.out.println("Changed");
}
});
这是一个演示应用程序,因此仅使用一个按钮,并且在应用程序启动时具有焦点。我只需按空格键即可模拟点击事件。根据教程(OReilly:Java Swing),它应该触发两次更改事件,然后触发一个动作事件,然后是一个动作事件。IE
- 改变了
- 改变了
- 动作事件
- 改变了
但在第 4 次活动之后,我得到了另一个 ChangeEvent。上面提到的方式,实际上一次点击有5个事件。如果我尝试用鼠标单击,结果会更加不同。当鼠标进入按钮区域时,会触发一个事件。
我不知道会发生什么变化,当鼠标悬停在 JButton 上时会引发 ChangeEvent。我没有找到类似 getChangedState (ItemStageChanged) 的方法让 JButton 知道该按钮的状态发生了变化。由于它是关于学习的,除非我了解这个问题,否则我不想使用 ActionListener。
所以我的问题是:
- 为什么我在应该是一次的地方看到两次 ChangeEvent?
- 如何找到 JButton 中更改的状态?
编辑:我看到 DefaultButtonModel 中提到了 5 个状态,它们是在 ButtonModel 接口中定义的。但是 JButton 没有获取这些状态的字段和方法。他们是否心甘情愿地被忽视了?或者 JButton(和 AbstractButton)与 ButtonModel 接口无关。
编辑2:教程表明,
根据 L&F,可能还会有额外的 ChangeEvents。
我在 Windows 中使用 Swing 的默认 L&F,但得到的结果与教程的预期不同。