Я хочу оценить, пуст ли ListView, чтобы отключить или включить кнопку отправки. Таким образом, когда в ListView нет содержимого, кнопка отключена, а когда в нем есть 1 или более элементов, она включена.
Мне удалось добиться этого с помощью ListChangeListener, используя такой код:
vp.addListChangeListener(change -> {
change.next();
if (change.getList().size() == 0 && change.wasRemoved() || change.getList().size() == 1 && change.wasAdded()) {
bp.toggleSubmitAvailability("submit");
}
});
где метод addListChangeListener выглядит следующим образом:
public void addListChangeListener(ListChangeListener<Name> listener) {
names.addListener(listener);
}
В идеале я хотел просто использовать традиционный ChangeListener и прослушивать одно из свойств, связанных с ListView. В качестве примера я подумал, что это может сработать:
vp.addItemsListener((observable, oldValue, newValue) -> {
if (newValue.size() == 0 && oldValue.size() > 0 || newValue.size() == 1 && oldValue.size() == 0) {
bp.toggleSubmitAvailability("submit");
}
});
где метод addItemsListener выглядит следующим образом (и прикрепляет прослушиватель к itemsProperty):
public void addItemsListener(ChangeListener<ObservableList<Name>> listener) {
listView.itemsProperty().addListener(listener);
}
Однако по какой-то причине, когда я добавляю элементы в свой ListView или хорошо добавляю элементы в прикрепленный к нему ObservableList, это свойство не изменяется, так как ничего не происходит - так что же на самом деле вызывает изменение itemsProperty ListView , и если этот подход не сработает, есть ли способ сделать то, что я сделал с ListChangeListener, используя другое свойство, связанное с ListView (конечно, достаточно элегантным способом)?