繁体   English   中英

Java Swing问题,为什么changeEvent用jButton触发额外的事件?

[英]Java Swing issue, why is a changeEvent firing extra events with a jButton?

在尝试学习JButton事件时,我因为一个问题而感到困惑。 我正在使用的示例代码在这里

代码如下:

jb.addChangeListener(new ChangeListener() 
{
    @Override
    public void stateChanged(ChangeEvent e)
    {
        System.out.println("Changed");
    }
});

这是一个演示应用程序,因此只使用一个按钮,它在应用程序启动时具有焦点。 我只需按空格键即可模拟点击事件。 根据教程(由OReilly:Java Swing),它应该触发两次更改事件,然后是动作事件,然后是动作事件。

  1. 动作事件

但是在第四次活动​​之后我得到了另一个ChangeEvent。 以上述方式实际上只有一次点击就有5个事件。 如果我试图用鼠标点击,结果会更加不同。 当鼠标进入按钮区域时,会触发一个事件。

我不知道发生了什么变化,当鼠标悬停在JButton上时会引发ChangeEvent。 我没有找到像JButton的getChangedState(ItemStageChanged)这样的类似方法来知道该按钮中的状态发生了什么变化。 因为它是关于学习的,所以除非我理解这个问题,否则我不想使用ActionListener。

所以我的问题是:

  1. 为什么我看到ChangeEvent两次应该是哪一个?
  2. 如何找到JButton中的状态?

编辑:我看到DefaultButtonModel中提到了5个状态,它们是在ButtonModel接口中定义的。 但JButton没有字段,方法来获得这些状态。 他们是否愿意被忽视? 或者JButton(和AbstractButton)与ButtonModel接口无关。

编辑2:教程指出,

根据L&F,可能还有其他ChangeEvents。

我在Windows中使用Swing的默认L&F但是我得到的结果与教程的预期不同。

按顺序时按顺序发生的五个事件是:ChangeEvent:Armed - true ChangeEvent:Pressed - true ActionEvent ChangeEvent:Pressed - false ChangeEvent:Armed - false

如果您使用鼠标按下按钮,那么除了上面的内容之外,还会有一个ChangeEvent for Rollover:当鼠标移过按钮时为true,而另一个用于Rollever:当鼠标离开按钮时为false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM