3

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

你能解释一下这种行为吗?是否有更好的方法来实现我想要的?谢谢。

4

0 回答 0