【问题标题】:Is there a way to check if a ComboBox has any items in JavaFX?有没有办法检查 ComboBox 在 JavaFX 中是否有任何项目?
【发布时间】:2017-01-20 13:06:54
【问题描述】:

有没有办法检查ComboBox 中是否有任何项目或是否为空?我有一个ComboBoxes 数组,我需要遍历它们中的每一个,如果ComboBox 中没有项目,那么我必须隐藏它。以下代码似乎不起作用:

for (ComboBox cmb : comboBoxes) {
    if (cmb.getItems().isEmpty()) {
        cmb.hide();
    }
}

【问题讨论】:

  • 也许 getItems().size ()
  • 谢谢,这似乎与 cmb.setVisible(false);

标签: java javafx combobox


【解决方案1】:

检查的代码,如果ComboBox没有项目是正确的,你隐藏ComboBoxes的代码是不正确的。

ComboBox.hide 仅关闭显示项目的弹出窗口,如果它是打开的。它不会隐藏ComboBox。要隐藏ComboBox,需要设置可见性:

for (ComboBox cmb : comboBoxes) {
    if (cmb.getItems().isEmpty()) {
        cmb.setVisible(false);
    }
}

【讨论】:

    【解决方案2】:

    或者调用一个方法来隐藏ComboBoxes,您可以使用自定义绑定将ComboBoxes 的visibleProperty 绑定到它们自己的itemsProperty:

    List<ComboBox<String>> comboBoxes = new ArrayList<>();
    for(int i = 0; i< 10; i++) {
        ComboBox<String> combo = new ComboBox<>();
        combo.visibleProperty().bind(Bindings.createBooleanBinding(() -> !combo.getItems().isEmpty(),
            combo.itemsProperty().get()));
        comboBoxes.add(combo);
    }
    

    优点是,您不必调用任何方法来隐藏您的ComboBoxes,因为绑定是自动评估的,因此没有人可以看到您的空组合。

    【讨论】:

      【解决方案3】:

      .getItems() 方法返回一个ObservableList&lt;T&gt;,因此您可以检查它的.size()。这会告诉你它是否为空。

      for (ComboBox cmb : comboBoxes) {
        if (cmb.getItems().size() <= 0) { // or cmb.getItems().isEmpty()
            cmb.setVisible(false); }
      }
      

      如果ComboBox 由它自己的List 填充,您也可以使用相同的.size() 调用检查列表是否为空。

      【讨论】:

        猜你喜欢
        • 2016-08-26
        • 2021-01-02
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        相关资源
        最近更新 更多