我有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()
onChange
会让我回复-1
并且我不明白为什么(如果我打印出onChange的值,例如第一个System.out,值是正确的。)
你能解释一下这种行为吗?有没有更好的方法来达到我的目的? 感谢。