我读到一个JButton实现了ItemSelectable,并且在文档中它具有方法addItemListener,所以我可以争辩说它可以生成一个ItemEvent …但是当我向一个JButton注册(还为一个JMenuItem注册)时,该事件没有发生吗?
为什么?
我了解,如果在docs中报告某个组件具有add ….侦听器,则表示它支持该事件…但出于经验的考虑,这种情况并不常见.
真相是什么
解决方法:
“按下”按钮(触发一个ActionEvent)和一个“选择”按钮(触发ItemEvent)之间是有区别的.默认情况下,JButton由javax.swing.DefaultButtonModel支持.如果查看默认按钮模型中的setPressed和setSelected方法,您将看到触发不同事件的代码.
因此,如果您以编程方式调用JButton.setSelected,则将触发您的项目侦听器.如果单击该按钮,则只会获得操作事件.
还要注意,使用JButton(与JToggleButton不同)时,选择它时可能看不到太多视觉效果.