我想评估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添加项时,这个属性没有被更改,因为什么都没有发生-所以实际上是什么触发了ListView的itemsProperty更改,如果这种方法不起作用,有没有一种方法可以像我对ListChangeListener所做的那样,通过使用与ListView关联的另一个属性(当然是以一种相当优雅的方式)?