java - 将一些复选框从一个 ActionListener 转移到另一个 ActionListener

标签 java swing

我想在单击按钮 b 后检查选中了哪些复选框, 但是我的复选框是在我单击按钮 b1

之后声明的

我的意思是,我应该全局声明 checkbox[] 吗?我该怎么做?

b1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent event){
       JCheckBox checkbox[] = new JCheckBox[3];
       checkbox[0] = new JCheckBox("Red");
       checkbox[1] = new JCheckBox("Blue");
       checkbox[2] = new JCheckBox("Green");
    }
});

b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
       if(checkbox[0].isSelected())
          // do something
       if(checkbox[1].isSelected())
          // do something
       if(checkbox[2].isSelected())
          // do something
    }
});

Error: checkbox cannot be resolved to a variable

最佳答案

复选框数组应该对两个监听器都可见。一种选择是作为实例变量。

例如(实际上不会编译,只是一个片段):

   private JCheckBox[] checkboxes;

   void register() {
     s1.addListener(e -> {
        checkboxes = new JCheckBox[3];
        // do the rest
     };

     s2.addListener(e -> {
         if(checkboxes[0].isChecked()) {
         } 
         // ....
      };
    }

但是,这是一个糟糕的设计,因为 checkboxes 成员未完全初始化以供使用,这可能会导致 NullPointerException。 相反,您最好在构造函数或其他东西中初始化数组。

考虑:

   private JCheckBox[] checkboxes;

    SomeClass() {
      checkboxes = new JCheckBox[3];
       // do the rest
     }

     void register() {
       s2.addListener(e -> {
         if(checkboxes[0].isChecked()) {
         } 
         // ....
      };
    }

关于java - 将一些复选框从一个 ActionListener 转移到另一个 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784469/

相关文章:

java - 让 JFreeChart 中的条形半透明?

java - 如何从 Activity A 到 Activity B 显示seekBar值和选定的微调项目?

Java处理ClassNotFoundException

java - 在 amazon s3 中授予对通过 PutObjectRequest 上传的对象的读取权限

java - 使用 JLabel 显示所选图像文件时出现的问题

java - 如何从组合框中禁用/删除上下文菜单?

java - 如何将spring checkbox标签转换为struts2 checkbox?

java - ExecuteQuery 因未知原因挂起。用尽通用解决方案

java - 当我 validate() 时不需要Repaint()

java - 如何让带有自动换行功能的 JTextArea 随 FormLayout 一起缩小?