如何在用户输入时从ListView添加/删除项目?

时间:2016-11-18 00:51:55

标签: java listview javafx combobox

所以我有以下ListView

ObservableList<String> numList = FXCollections.observableArrayList(
                "1","2","3"
        );

我希望能够根据用户之前在ListView中选择的内容更改ComboBox中的项目。

假设用户想要7个项目而不是我拥有的默认3个项目。然后,代码将出现:

ObservableList<String> numList = FXCollections.observableArrayList(
                "1","2","3","4","5","6","7"
        );

有没有办法做到这一点,还是我必须创建多个ListView并根据用户输入使用我需要的任何一个?

1 个答案:

答案 0 :(得分:0)

您可以使用相同的ListView。您甚至不需要替换items列表,只需修改现有项目即可 顺便说一句:在这种情况下,我建议使用Integer作为类型参数:

ComboBox<Integer> comboBox = new ComboBox<>(FXCollections.observableArrayList(1, 3, 5, 7));
ObservableList<Integer> numList = FXCollections.observableArrayList();
ListView<Integer> listView = new ListView<>(numList);

ChangeListener<Integer> listener = (observable, oldCount, newCount) -> {
    int size = numList.size();
    int newSize = newCount == null ? 0 : newCount;
    if (size > newSize) {
        numList.subList(newSize, size).clear();
    } else {
        for (int i = size+1; i <= newSize; i++) {
            numList.add(i);
        }
    }
};

comboBox.valueProperty().addListener(listener);

// in case you assigned a initial value before
listener.changed(null, null, comboBox.getValue());

但是,您也可以使用ListView

替换现有setValue的项目列表。
ListView<String> listView = new ListView<>();
ComboBox<ObservableList<String>> comboBox = new ComboBox<>(...);
ChangeListener<ObservableList<String>> listener = (observable, oldList, newList) -> {
    if (newList == null) {
        newList = FXCollections.emptyObservableList();
    }
    listView.setItems(newList);
};
comboBox.valueProperty().addListener(listener);

// in case you assigned a initial value before
listener.changed(null, null, comboBox.getValue());