【发布时间】:2012-05-14 20:43:42
【问题描述】:
我正在尝试扩展一些 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 组件而不是使用动作侦听器的原因。
【问题讨论】:
-
我的第一个问题:为什么要扩展这些组件而不是简单地使用它们?
-
你为什么假设 GUI 正是调用这个方法来设置值?如果您想在进行更改时启动操作,则应使用适当的侦听器。
-
我自己,我将扩展我添加到我的 JCheckBox 的 AbstractAction。
-
关于你的“UP”:我认为这是一个不好的理由。如果您想扩展附加到组件的操作,请不要扩展视图或组件本身,因为您的目标与显示组件无关。简而言之:不要扩展组件;错了。
标签: java swing overriding jcheckbox