我在下面制作了这个示例来模拟多个 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/