【问题标题】:Java Swing Group of checkbox multiple selection handlerJava Swing Group 的复选框多选处理程序
【发布时间】:2020-05-28 23:07:11
【问题描述】:

我有一组复选框(多选),我想知道使用 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 能解决问题吗?

【问题讨论】:

    标签: java swing checkbox


    【解决方案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[i] = new JCheckBox(food[i]);
    

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

    public void printSelectedNames(JCheckBox[] boxes) {
    
        for(JCheckBox box : boxes)
            if(box.isSelected())
                System.out.println(box.getText());
    }
    

    【讨论】:

    • 太棒了!非常感谢!
    • 我相信你的意思是boxes[i] = new JCheckBox(food[i]);
    猜你喜欢
    • 2023-04-08
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多