【问题标题】:Get the number of checkboxes in Swing获取 Swing 中的复选框数量
【发布时间】:2015-11-27 16:07:34
【问题描述】:

我有大约 50 个复选框,下面是 3 个的示例代码。

JCheckBox checkboxOne = new JCheckBox("One");
JCheckBox checkboxTwo = new JCheckBox("Two");
JCheckBox checkboxThree = new JCheckBox("Three");


// add these check boxes to the container...

// add an action listener
ActionListener actionListener = new ActionHandler();
checkboxOne.addActionListener(actionListener);
checkboxTwo.addActionListener(actionListener);
checkboxThree.addActionListener(actionListener);
 
// code of the action listener class
 
class ActionHandler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent event) {
        JCheckBox checkbox = (JCheckBox) event.getSource();
        if (checkbox == checkboxOne) {
            System.out.println("Checkbox #1 is clicked");
        } else if (checkbox == checkboxTwo) {
            System.out.println("Checkbox #2 is clicked");
        } else if (checkbox == checkboxThree) {
            System.out.println("Checkbox #3 is clicked");
        }
    }
}

在这里,我想遍历 50 个复选框,例如创建可用复选框的 ArrayList 并循环它们以检查哪个被选中。我无法理解如何创建复选框的 ArrayList。

我提到了Array of checkboxes in java,但我无法理解如何使用它?

请告诉我如何做到这一点。

【问题讨论】:

  • 您在链接到的答案中到底有什么不明白的?如果你成功创建了数组列表,你可以简单地做这样的事情来查看哪些被检查:for (JCheckBox cb : checkBoxes) {if (cb.isSelected()) {// What to do if it is selected}}
  • 嗨@LuxxMiner,我已经试过了,我用过for (JCheckBox cb : checkboxes) {if (cb.isSelected()) {System.out.println("selected");} else {System.out.println("no");}},但是我的控制台打印了三个no,虽然我已经检查过然后点击按钮
  • 您已经修改了您的代码,并在此基础上提出了一个新问题。这不是你应该做的。如果您有新问题,请提出新问题。编辑的重点是细化或显示问题的进度。现在,搜索与您相同的原始问题的用户会发现一个无意义的答案。 我对你的新问题有了答案。请作为一个新的发布并将这个回滚到它的原始范围

标签: java swing checkbox


【解决方案1】:

创建JCheckBoxArrayList 并按顺序添加它们。 然后,您可以使用indexOf() 函数来检索号码,如下所示:

public class TestFrame extends JFrame {

    public TestFrame() {
        setLayout(new GridLayout());
        setSize(500, 500);

        JCheckBox checkboxOne = new JCheckBox("One");
        JCheckBox checkboxTwo = new JCheckBox("Two");
        JCheckBox checkboxThree = new JCheckBox("Three");

        final ArrayList<JCheckBox> checkBoxes = new ArrayList<>();

        add(checkboxOne);
        add(checkboxTwo);
        add(checkboxThree);

        checkBoxes.add(checkboxOne);
        checkBoxes.add(checkboxTwo);
        checkBoxes.add(checkboxThree);

        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                JCheckBox checkbox = (JCheckBox) event.getSource();
                int index = checkBoxes.indexOf(checkbox) + 1;
                System.out.println("Checkbox #" + index + " is clicked");
            }
        };
        checkboxOne.addActionListener(actionListener);
        checkboxTwo.addActionListener(actionListener);
        checkboxThree.addActionListener(actionListener);
    }

    public static void main(String[] args) {
        TestFrame frame = new TestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

请注意,这是对您的代码的改编。这个例子尽可能地接近你的代码,所以唯一的修改应该反映我想要表达的观点。

编辑

由于您修改了问题并提出了新问题,因此答案的第二部分如下:

在我的动作监听器中,我试图获取选中框的值,但它抛出 null 作为名称,虽然我已经检查过,但输出显示为未选中。

修改您的代码以使用getText() 而不是getName(),例如:

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        System.out.println(checkBoxes.size());
        for (int i = 0; i < checkBoxes.size(); i++) {
            if (checkBoxes.get(i).isSelected()) {
                System.out.println(" Checkbox " + i + " and " + checkBoxes.get(i).getText() + " is selected");
            } else {
                System.out.println(
                        " Checkbox " + i + " and " + checkBoxes.get(i).getText() + " is noooooot selected");
            }
        }
    }

});

【讨论】:

    【解决方案2】:

    要使用CheckBoxes 定义ArrayList,请参考以下示例:

    List<JCheckBox> chkBoxes = new ArrayList<JCheckBox>();
    

    使用标准方法将您的JCheckBox 元素添加到ArrayList,例如:

    JCheckBox chkBox1 = new JCheckBox();
    chkBoxes.add(chkBox1);
    

    使用JCheckBox方法#.isSelected()对列表进行交互并检查是否选中,如下所示:

    for(JCheckBox chkBox : chkBoxes){
       chkBox.isSelected(); // do something with this!
    }
    

    【讨论】:

      【解决方案3】:

      如果您需要从实际现有的框架/面板中获取所有复选框,您可以使用getComponents() 方法,如果它是复选框(不确定是否所有容器都支持 getComponents)

      例如:

      Component[] comps = jScrollPane.getComponents();
      ArrayList<JCheckBox> chckBoxes= new ArrayList<JCheckBox>();
      
      
      for(Component comp : comps) {
           if(comp instanceof JCheckBox) {
                chckBoxes.add((JCheckBox) comp);
           }
      }
      

      (创立@Get all swing components in a container)

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 2020-08-25
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多