我有一个ComboBox
模型ObservableList<Item>
。我可以在外部更新列表的元素,并且我想更新当前选定的项目ComboBox
是否已被修改。我试着做:
private final ObservableList<Item> list;
private ComboBox<Item> comboBox;
....
comboBox.setItems(list);
comboBox.getSelectionModel().selectFirst();
System.out.println("selected index: " + comboBox.getSelectionModel().getSelectedIndex(); );
ListChangeListener<Item> listener = new ListChangeListener<Item>() {
@Override
public void onChanged(ListChangeListener.Change<? extends Item> c) {
while (c.next()) {
for (int i = c.getFrom(); i < c.getTo(); ++i) {
int selectedIndex = comboBox.getSelectionModel().getSelectedIndex();
System.out.println("selected index: " + selectedIndex );
if (i == selectedIndex) {
comboBox.getSelectionModel().select(selectedIndex);
}
}
}
}
};
list.addListener(listener);
我ChangeListener
在列表中添加了一个,因此当更新中的某些元素时list
,我可以更新comboBox
. 但这不起作用,因为comboBox.getSelectionModel().getSelectedIndex()
insideonChange
返回了我-1
,我不明白为什么(如果我从 onChange 中打印出值,例如第一个 System.out,则该值是正确的)。
你能解释一下这种行为吗?是否有更好的方法来实现我想要的?谢谢。