【问题标题】:Third option on JCheckBox? [duplicate]JCheckBox 的第三个选项? [复制]
【发布时间】:2016-05-31 13:29:30
【问题描述】:

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

这是什么意思?它有什么目的,如果有,我如何在 Java 中实现它?

【问题讨论】:

  • 也许是你用 Swing 无法实现的。我会调查Javafx
  • 我没有完全明白你的问题。但如果你想选择/取消选择组合框的某些值,你可以随时使用 combobox.setselected(index)
  • 我很抱歉——我指的是 JCheckBox,而不是 JComboBox。 :P
  • 如果这不是重复的,请编辑您的问题以包含显示任何剩余问题的minimal reproducible example

标签: java swing jcheckbox


【解决方案1】:

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

例如,当你在 Android Studio 的 SDK 页面中,你有一堆不同版本的 SDK 的复选框,每个版本由源、构建工具等组成。当你选择所有版本内的元素,版本的复选框将有一个正常的勾号,但是如果您只选择版本内的源,该版本的复选框将是一个减号或其他一些图标。当有可选功能时,您也可以在安装程序中找到它,例如 Notepad++ 和许多其他功能。

至于在 Java 中实现它,我认为 Swing 中没有任何内置解决方案,您要么必须像 camickr 放入 cmets 的 post 那样自己编写它,否则您将拥有使用其他库,如 JavaFX 或其他第三方。

【讨论】:

    【解决方案2】:

    我认为 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);
                }
            }
        });
    

    【讨论】:

    • 这只是根复选框在子复选框上的行为(如果您检查根所有子复选框),但是这不允许 OP 创建部分选择(“减号") 图标...
    • 部分选择只出现在最右边。勾选后,再取消勾选,就不会再出现。这只是一个 UI 设计吗?
    • 正常情况下,如果有部分选择,它应该总是出现。你检查myCheckBox,它检查所有的孩子,你有一个完整的选择。如果您不选中 myCheckBox 但选中 childCheckBox1 childCheckBox2myCheckBox 应该有部分选择图标,如果您选中 childCheckBox1 childCheckBox2, myCheckBox 应该有完整的选择图标。
    • 好的,我明白了。我认为我们仍然可以自定义它。我们可以创建一个函数来检查所有复选框是否被选中。该函数始终在子复选框选中或取消选中时调用。该功能更改父复选框的图标。但是,如果@RobotKarel314 搜索其他库会更好。
    • 如果 OP 搜索其他库而不是 Swing 确实会更好,但您建议的解决方案基本上是 camickr 在他的评论中链接的答案。 OP 需要覆盖默认类和默认绘画行为来添加第三个图标,但它似乎只在 Windows 上正常工作。
    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多