我有一個cuttingOperationComboBox
組合框和改變這種組合框的項目和值的方法:JavaFX的屬性更改偵聽器:空NEWVALUE
public void changeGlass(Glass newGlass)
{
ObservableList<Operation> list = new FilteredList<Operation>(ProductGlassCuttingUI.this.operationsDB.getOperationsList(), operation -> operation.getOperationType().toString().equals("RE") &&
operation.getGlassThickness() == newGlass.getGlassThickness());
if(!list.contains(this.cuttingOperationComboBox.getValue()))
cuttingOperationComboBox.setValue(list.get(0));
cuttingOperationComboBox.setItems(list);
}
我也有變化監聽器添加到cuttingOperationComboBox.valueProperty()
。 這是第一次被cuttingOperationComboBox.setValue(list.get(0));
發射,這裏一切都很好。但當cuttingOperationComboBox.setItems(list);
引發更改監聽器時,雖然list
不爲空,但newValue爲空。而且它只有在ComboBox可見時纔會發生。 Tobe更精確:cuttingOperationComboBox作爲TreeCell圖形的一部分顯示在TreeView中。只要包含組合框的樹視圖節點被摺疊,一切都可以,但是當我展開此節點並顯示組合框時,就會出現上述問題。 有人知道我在做什麼錯?
感謝您的回覆。我想要做的只是更改組合框的項目,並保留當前值,如果它是新列表的元素。爲了避免上面的問題與空newValue我檢查之前採取任何行動在chnage監聽器,就像你提出的。現在一切正常,但我只是好奇,爲什麼newValue有時是空的,而它應該不是。至少我認爲是這樣,但我可能是錯誤的,ComboBox類中有些東西我不明白。 – aban
@aban就像我說的,當你調用'setItems()'時,你告訴'ComboBox':「嘿,我給你一個全新的列表。」會發生什麼情況是'ComboBox'會假設你原來選擇的值不再正確(因爲該值甚至可能不會出現在你的新列表中),所以它會清除該值,導致值變爲null。 – Jai