java - 使用多个 ActionListener 创建多个 JCheckBox

标签 java swing actionlistener jcheckbox itemlistener

我在下面制作了这个示例来模拟多个 JCheckBox 创建及其 Action Listener。

int global=0;

//some code

JCheckBox[] checkBox = new JCheckBox[2];

        for(int i = 0; i <=1; i++){

        checkBox[i] = new JCheckBox(strings[i]);
        panel.add(checkBox[i]);

          checkBox[i].addItemListener(new ItemListener() {

                @Override
                public void itemStateChanged(ItemEvent evt) {
                    if (evt.getStateChange() == ItemEvent.SELECTED){
                        JOptionPane.showConfirmDialog(null, "Message"+global);
                    }
                }
            });                                                             
          global++;
        }

我没有得到的是,我的对话框输出始终是“消息 2”。在我的逻辑中,如果我为每个复选框声明一个 AddItemListener,我应该为每个复选框接收两个不同的对话框,例如“消息 1”和“消息 2”。我在这里做错了什么?请问如何处理?

提前致谢

最佳答案

当第一次调用 showConfirmDialog() 时,global 的值已经是 2。如果你想为每个复选框设置不同的消息,请尝试将 global++ (将在每次调用时递增)就在 JOptionPane.showConfirmDialog(null, "Message"+global); 之前; 这会让你更清楚。

if I'm declaring one AddItemListener for each checkBox, I should recieve two different dialogs for each checked box, such as "Message 1" and "Message 2"

如果您知道每个复选框只有一个监听器,为什么您认为每个复选框应该调用两次(不同的)监听器方法?

更可能的解决方案之一是实现您自己的 ItemListener,它存储了要在其实例变量中显示的消息(或只是数字)。

关于java - 使用多个 ActionListener 创建多个 JCheckBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251491/

相关文章:

java - 可滚动的 JFree 域轴和自定义标记标签

java - Intellij Idea中使用 "Runtime.getRuntime().exec"方法时如何设置JAVA_HOME?

java - JInternalFrame 和键绑定(bind)

java - 为什么JFrame在不同的线程中实例化

java - 多次射击会导致 Swing 计时器重复

java - 如何在 jdialog 的 ok 选项上设置 actionlistener?

java - 嵌套循环问题/循环 2 次并且也在 switch case 中默认运行

java - 将BufferedImage中存储的animated-gif写入java.io.File对象

java - 动画期间屏幕闪烁白色

Java JComboBox 抑制更改监听器