我有一个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图形的一部分。只要包含组合框的树视图节点折叠,一切都可以,但是当我展开此节点并且组合框显示时,会出现上述问题。
有谁知道我做错了什么?
答案 0 :(得分:0)
每当您拨打setItems()
的{{1}}(或涉及项目列表的其他控件)时,ComboBox
(或相应的控件)将始终清除所有选择。我相信这是由基础selection model引起的行为,我相信这是大多数用例的理想行为。
如果不确切知道自己取得了什么成就,很难为您提供准确的解决方案。如果您只是想在设置新列表后保留该值,则可能需要保留旧选择项的副本,然后在ComboBox
之后手动设置它。如果您不希望setItems()
回复ChangeListener
,请在侦听器中检查setItems()
null
,或者在某个地方保留一个布尔标志,告诉听众特定呼叫由newValue
触发。