【发布时间】:2016-10-22 05:18:22
【问题描述】:
我正在尝试重置 ComboBox 的选择,如下所示:
// private ListView<MyEntityType> f_lItems
f_lItems.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<?> ov, Object t, Object t1) {
if (t1 != null && t1 instanceof MyEntityType) {
MyEntityType pv = (MyEntityType) t1;
// do some condition testing
if (condition) {
// accept
} else
// roll back to previous item
f_lItems.getSelectionModel().select((MyEntityType) t);
}
}
}
});
所以,在尝试将列表重置为旧值后,我得到了这个异常:
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException
at com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.subList(Unknown Source)
at javafx.collections.ListChangeListener$Change.getAddedSubList(Unknown Source)
at com.sun.javafx.scene.control.behavior.ListViewBehavior.lambda$new$177(Unknown Source)
at javafx.collections.WeakListChangeListener.onChanged(Unknown Source)
at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(Unknown Source)
对于这种情况,我似乎没有得到Lists / ObservableLists 的基本行为。
有人对我如何使这项工作提出建议吗?
提前致谢 亚当
【问题讨论】:
-
您所说的“重置
ComboBox的选择究竟是什么意思?您是否希望ComboBox在您每次选择另一个时都有默认选择的项目? -
你想做什么?举个例子,用这种方法你可以有 StackOverflowError 错误...
-
假设选择的索引是 4。用户已将索引设置为 6。在更改的处理程序中,由于某些内部原因,我想将索引设置回 4。其实我想实现“你真的确定要改变你的选择”的事情。另一方面,我认为无论如何这都不应该是正确的方法。也许我必须首先阻止更改的事件。
标签: java javafx combobox listener