获取Swing中的复选框数量

时间:2015-11-26 13:36:58

标签: java swing checkbox

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

"<Options xmlns='EDFPlugin.Plugin1'> was not expected."

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

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

请告诉我怎么做。

3 个答案:

答案 0 :(得分:4)

创建ArrayList JCheckBox并按顺序添加它们。 然后,您可以使用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");
            }
        }
    }

});

答案 1 :(得分:2)

要使用class Tag extends Model { public function test($card_id){ return DB::SELECT(DB::RAW("SELECT name FROM tagmap tm, tags t WHERE t.id = tm.tag_id AND tm.card_id = :card_id"), ['card_id'=>$card_id]); } } 定义ArrayList,请参阅以下示例:

CheckBoxes

使用标准方法将List<JCheckBox> chkBoxes = new ArrayList<JCheckBox>(); 元素添加到JCheckBox,例如:

ArrayList

对列表进行互动并使用JCheckBox chkBox1 = new JCheckBox(); chkBoxes.add(chkBox1); 方法JCheckBox执行检查,如下所示:

#.isSelected()

答案 2 :(得分:0)

如果您需要从实际现有的框架/面板中获取所有复选框,您可以使用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