2016-11-18 4 views
0

だから私は、次のListViewがありますユーザからの入力時にListViewからアイテムを追加/削除するにはどうすればよいですか?

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

私は、ユーザーが以前にComboBoxで選択した内容に基づいてListView内の項目を変更することができるようにしたいです。

私が持っているデフォルト3の代わりに7つのアイテムが必要だとします。その後、コードが表示されます:

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

はこれを行う方法はありますか私は、ユーザー入力に基づいて必要な方1複数ListView sおよび使用を作成する必要がありますか?

+0

たのを使用して新しいものと既存のListViewの項目リストを置き換えることができますしかし、提案されたソリューションは動作しますか?そうであれば、回答の完了をマークします。 – Sedrick

答えて

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()); 

あなたも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()); 
関連する問題