JavaFX属性更改侦听器:null newValue

时间:2017-08-14 16:13:45

标签: java javafx combobox

我有一个sort ComboBox和一个更改此ComboBox的项目和值的方法:

cuttingOperationComboBox

我还将更改侦听器添加到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));触发更改侦听器时,其中的newValue为空,尽管cuttingOperationComboBox.setItems(list);不为空。此外,只有当ComboBox可见时才会发生。 Tobe更精确:cuttingOperationComboBox在TreeView中显示为TreeCell图形的一部分。只要包含组合框的树视图节点折叠,一切都可以,但是当我展开此节点并且组合框显示时,会出现上述问题。 有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

每当您拨打setItems()的{​​{1}}(或涉及项目列表的其他控件)时,ComboBox(或相应的控件)将始终清除所有选择。我相信这是由基础selection model引起的行为,我相信这是大多数用例的理想行为。

如果不确切知道自己取得了什么成就,很难为您提供准确的解决方案。如果您只是想在设置新列表后保留该值,则可能需要保留旧选择项的副本,然后在ComboBox之后手动设置它。如果您不希望setItems()回复ChangeListener,请在侦听器中检查setItems() null,或者在某个地方保留一个布尔标志,告诉听众特定呼叫由newValue触发。