Java 跟踪每次选中和取消选中复选框的情况

Java 跟踪每次选中和取消选中复选框的情况,java,swing,logging,real-time,jcheckbox,Java,Swing,Logging,Real Time,Jcheckbox,我已经完成了大部分java应用程序,所以现在我正在记录所有用户活动。我想跟踪的一件事是,每当我的某个复选框被选中或取消选中时。如果选中或取消选中对象,我可以在最后读取,但是我想知道每次实时使用复选框时。我想知道用户选中和取消选中该框的次数。现在我正在使用类似于此语法的东西,但它不会在每次选中和取消选中复选框时打印语句 public CheckboxAction(String text) { super(text); } @Override public void actionPerfo

我已经完成了大部分java应用程序,所以现在我正在记录所有用户活动。我想跟踪的一件事是,每当我的某个复选框被选中或取消选中时。如果选中或取消选中对象,我可以在最后读取,但是我想知道每次实时使用复选框时。我想知道用户选中和取消选中该框的次数。现在我正在使用类似于此语法的东西,但它不会在每次选中和取消选中复选框时打印语句

public CheckboxAction(String text) {
    super(text);
}

@Override
public void actionPerformed(ActionEvent event) {
    JCheckBox cbLog = (JCheckBox) event.getSource();
    if (cbLog.isSelected()) {
        System.out.println("Logging is enabled");
    } else {
        System.out.println("Logging is disabled");
    }
}

ItemListener在这里似乎很合适

yourJCheckBox.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent arg0) {
        if (yourJCheckBox.isSelected()) {
            // Code to execute when it's selected
        }
        else {
            // Code to execute when not selected
        }
    }
});

ItemListener在这里似乎很合适

yourJCheckBox.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent arg0) {
        if (yourJCheckBox.isSelected()) {
            // Code to execute when it's selected
        }
        else {
            // Code to execute when not selected
        }
    }
});

首先也是最重要的一点是,不要覆盖执行的
操作
。如果需要-至少在执行操作之前调用
super.actionPerformed
。最好的方法是使用
addActionListener
,或者在@BoDidely提到的这种情况下,首先使用
addItemListener

,不要覆盖
actionPerformed
。如果需要-至少在执行操作之前调用
super.actionPerformed
。最好的方法是使用
addActionListener
,或者在@BoDidely提到的情况下,使用
addItemListener

打印什么?它不是每次您选中“打开<代码>复选框”时都打印“日志记录已启用”吗?每次您选中“关闭<代码>复选框”时都打印“日志记录已禁用”?您能否提供一个可运行的示例来说明您的问题…打印的是什么?是否每次您勾选
打开
复选框时都会打印“日志记录已启用”和每次勾选
关闭
复选框时都会打印“日志记录已禁用”?您能否提供一个可运行的示例来说明您的问题…覆盖
操作执行
的危险是什么?如果实现actionListener接口,则必须实现
actionPerformed
方法。在这种情况下,
super.actionPerformed
做了什么?大多数Swing组件本身实现了各种监听器接口,供其内部使用。这就是为什么
actionPerformed
存在于一个超类中的原因(我认为在本例中
JToggleButton
)。通过重写它而不调用super,组件的部分功能将丢失。经验法则是使用一个
add*Listener
方法,而不是从超类重写这些类型的方法。那么我应该在回答中调用super.itemStateChanged()?我不太理解在类级别实现接口与将其用作侦听器或为每个组件提供自己的匿名侦听器之间的区别classes@BoDidely:您正在实现一个接口,因此
super
调用没有任何意义。稍后我将更新我的答案,提供更多详细信息。覆盖执行的
操作
有什么危险?如果实现actionListener接口,则必须实现
actionPerformed
方法。在这种情况下,
super.actionPerformed
做了什么?大多数Swing组件本身实现了各种监听器接口,供其内部使用。这就是为什么
actionPerformed
存在于一个超类中的原因(我认为在本例中
JToggleButton
)。通过重写它而不调用super,组件的部分功能将丢失。经验法则是使用一个
add*Listener
方法,而不是从超类重写这些类型的方法。那么我应该在回答中调用super.itemStateChanged()?我不太理解在类级别实现接口与将其用作侦听器或为每个组件提供自己的匿名侦听器之间的区别classes@BoDidely:您正在实现一个接口,因此
super
调用没有任何意义。稍后我会更新我的答案,提供更多细节。