Java JCheckBox上的第三个选项?

Java JCheckBox上的第三个选项?,java,swing,jcheckbox,Java,Swing,Jcheckbox,当我使用Eclipse或Word等应用程序时,我偶尔会看到一个既没有选中也没有取消选中的JCheckBox,它有一种“减号”图标: 这是什么意思?它有什么用途吗?如果有,我如何在Java中实现它?通常,这种复选框在树视图(包含复选框子集的复选框)中使用,以指示它已被部分选中 例如,当您在Android Studio中的SDK页面中时,您有一系列针对不同版本SDK的复选框,每个版本都由源代码、构建工具等组成。当您选择版本中的所有元素时,版本的复选框将有一个正常的勾号,但是,如果仅选择版本内的源,

当我使用Eclipse或Word等应用程序时,我偶尔会看到一个既没有选中也没有取消选中的JCheckBox,它有一种“减号”图标:


这是什么意思?它有什么用途吗?如果有,我如何在Java中实现它?

通常,这种复选框在树视图(包含复选框子集的复选框)中使用,以指示它已被部分选中

例如,当您在Android Studio中的SDK页面中时,您有一系列针对不同版本SDK的复选框,每个版本都由源代码、构建工具等组成。当您选择版本中的所有元素时,版本的复选框将有一个正常的勾号,但是,如果仅选择版本内的源,则该版本的复选框将为负号或其他图标。当安装程序中有可选功能时,如记事本++和许多其他功能时,您也可以在安装程序中找到这一点


至于在Java中实现它,我认为Swing中没有任何内置的解决方案,你要么像camickr在评论中提到的那样自己编写,要么使用其他库,如JavaFX或其他第三方。

我认为Swing不支持构建UI。但是这个代码有相同的功能。选中此项:

    myCheckBox.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                //Check all Checkbox below
                childCheckbox1.setSelected(true);
                childCheckbox2.setSelected(true);
            } else {
                //Uncheck all Checkbox below
                childCheckbox1.setSelected(false);
                childCheckbox2.setSelected(false);
            }
        }
    });

也许你用Swing做不到。我会研究一下
Javafx
。我没有完全理解你的问题。但是如果你想选择/取消选择组合框的某些值,你可以始终使用组合框。setselected(index)我道歉-我是说JCheckBox,而不是JComboBoxPOne方法:如果这不是重复的,请编辑您的问题,以包括显示任何剩余问题的。这只是根复选框在子复选框上的行为(如果您选中根复选框,则所有子复选框都被选中),但是这不允许OP创建部分选择(“减”)图标…部分选择仅显示在右上方。在您选中它并再次取消选中它之后,它将不会再次出现。这只是一个UI设计吗?通常,如果有部分选择,它应该总是出现。如果选中“我的复选框”,它会选中所有的孩子,您就有了完整的选择。如果您没有选中
myCheckBox
但选中了
childCheckBox1
childCheckBox2
myCheckBox
应该有部分选择图标,如果您选中
childCheckBox1
childCheckBox2
mycheckbox2
应该有完整选择图标。好的,我明白了。我想我们还是可以定制的。我们可以创建一个函数,如果选中或未选中,则选中所有复选框。该函数始终在选中或取消选中子复选框时调用。和功能更改父复选框的图标。但是,如果@RobotKarel314在其他库中搜索这个会更好。如果OP搜索另一个库而不是Swing,确实会更好,但是你建议的解决方案基本上就是camickr在评论中链接的答案。OP需要覆盖默认类和默认绘制行为以添加第三个图标,但是它似乎只在Windows上正常工作。