javajavax。摆动JCheckBox setSelected未从GUI调用
我试图扩展一些Swing组件,并重写与状态交互的方法(JComboBox的setSelectedIndex、JCheckBox的setSelected等)。 JCheckBox有问题。我已经重写了setSelected方法,但当用户通过UI更改JCheckBox状态时,它似乎不会调用。我可以通过调用方法来更改JCheckBox状态,但GUI似乎使用了另一种方法来更改其状态。我怎样才能在班上赶上那个活动? 对于其他Swing类,一切正常,所有重写的方法都正常工作
public class MyCheckBox extends JCheckBox {
@Override
public void setSelected(boolean selected) {
//Method is not performed when MyCheckBox is clicked
super.setSelected(selected);
}
}
起来 我已经有了支持“撤销/重做”操作的组件包。我刚刚向所有组件添加了addUndoableEditListener(UndoableEditListener l)方法,所以实现隐藏在我的组件中。这就是我扩展Swing组件而不是使用动作侦听器的原因
# 1 楼答案
虽然所有的注释都是相关的,并且可能不需要扩展这些组件,但我做了一个快速测试,以确定当您单击按钮时遵循的代码路径(只是出于好奇)。下面的代码
当按钮后面模型的选定状态发生变化时,允许确定stacktrace。stacktrace显示了以下相关部分
基本上,监听器直接与按钮模型交互
# 2 楼答案
如果只想监听此更改,请使用ItemListener(它甚至会监听ButtonGroup更改或setSelected方法调用所产生的事件):
如果您只想从“UI”接收更改,也可以添加ActionListener
但是如果你真的想知道复选框是如何改变“UI”的状态的
JCheckBox只是一个简单的按钮,每个状态都有合适的图标,所以我们应该看到JButton事件
在JButton类中听鼠标没有任何意义——它隐藏在当前ButtonUI的内部
在BasicButtoni类中,您可以找到添加到其中的侦听器:
在鼠标释放时的BasicButtonListener中:
因此,该事件被发送到按钮内部的ButtonModel集合。要捕获它,您必须将按钮内的ButtonModel替换为您自己的:
# 3 楼答案
您需要add和^{} 到复选框