所以我有以下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
并根据用户输入使用我需要的任何一个?
答案 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());