2014-10-07 59 views
1

我有一组复选框(多选)的,我想知道哪些项目,采用ListSelectionListener的Java Swing集团

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

编号
创建一个JCheckBox数组。

对于前:

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()); 
} 
+0

太棒了!非常感谢! – 2014-10-20 20:32:39

+0

然后接受答案 – 2014-10-21 00:05:51