![](/img/trans.png)
[英]How can I get the items from a ListView and convert these items to an ArrayList?
[英]How can I add/delete items from a ListView upon input from user?
所以我有以下ListView
:
ObservableList<String> numList = FXCollections.observableArrayList(
"1","2","3"
);
我希望能夠根據用戶先前在ComboBox
選擇的內容來更改ListView
的項目。
假設用戶想要7個商品,而不是我擁有的默認3個商品。 然后,代碼將出現:
ObservableList<String> numList = FXCollections.observableArrayList(
"1","2","3","4","5","6","7"
);
有什么方法可以執行此操作,還是我必須創建多個ListView
並根據用戶輸入使用所需的任一個?
您可以使用相同的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());
但是,您也可以使用setValue
將現有ListView
的項目列表替換為新的ListView
。
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.