是否有一种方法来检查组合框是否有任何项目在JavaFX



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

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

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

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

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

或者调用一个方法来隐藏ComboBox es,您可以使用自定义绑定将ComboBox es的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);
}

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

.getItems()方法返回ObservableList<T>,因此您可以检查其.size()。它会告诉你是否为空。

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

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

最新更新