JavaFx 8:如果修改了ComboBox的当前所选项,则更新它

时间:2014-07-08 14:20:17

标签: combobox javafx-8 changelistener observablelist

我有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,值是正确的。)

你能解释一下这种行为吗?有没有更好的方法来达到我的目的? 感谢。

0 个答案:

没有答案