Java Swing Group复选框多选处理程序

时间:2014-10-07 17:11:09

标签: java swing checkbox

我有一组复选框(多项选择),我想知道使用ListSelectionListener选择了哪些项目

    Box box = new Box(BoxLayout.Y_AXIS);
    foodBox = new JCheckBox("");
    proteinBox  = new JCheckBox("");
    noLabelBox =  new JCheckBox("");
    aggregateBox =  new JCheckBox("");

    box.add(getLegendSpecificBox("FOOD", new Color(0, 255, 127), 0));
    box.add(foodBox);
    box.add(getLegendSpecificBox("PROTEIN", new Color(240, 230, 140), 0));
    box.add(proteinBox);
    box.add(getLegendSpecificBox("NO LABEL", new Color(220, 220, 220), 0));
    box.add(noLabelBox);
    box.add(getLegendSpecificBox("AGGREGATION", new Color(255, 140, 0), 0));
    box.add(aggregateBox);

我有一个图表,其中包含食物,蛋白质或聚合物标签的节点。我想要实现的是当我检查食物复选框时,我用其他标签(蛋白质等)灰化节点。但我也想允许多种选择,例如,当我检查食物复选框和蛋白质复选框时,它会使其他标签变灰(聚合等),但食物和蛋白质保持其原始颜色。

我正在使用ItemListener并将其添加到每个复选框,但它不起作用,因为我无法检测到其他复选框也被检查。

你能帮我解决一下吗? ListSelectionListener可以做到吗?

1 个答案:

答案 0 :(得分:1)

没有。
创建一个JCheckBoxes数组。

例如:

String[] food = {"Pizza", "Burger", "Pasta", "Hot Dog", "etc"};

JCheckBox[] boxes = new JCheckBox[food.length]; //  Each checkbox will get a name of food from food array.  

for(int i = 0; i < boxes.length; i++)
    boxes = new JCheckBox(food[i]);

现在我们创建一个方法来检查选中了哪个框。您可以将相同的方法体复制到动作侦听器:

public void printSelectedNames(JCheckBox[] boxes) {

    for(JCheckBox box : boxes)
        if(box.isSelected())
            System.out.println(box.getText());
}