【发布时间】:2018-02-01 13:40:51
【问题描述】:
I have a listview being populated by an arraylist, and a combobox that, when items are selected, clear the listview and populate it with a different arraylist.这很好用,但问题是,我已经设置好了,当在列表视图中选择一个项目时,它会根据数组列表中的项目索引显示有关该项目的信息。切换arraylists时,显示的信息显然还是在使用原arraylist的索引。有什么方法可以查看正在使用哪个列表来阻止这种情况?
listview 上的监听器:
String item = lv_left.getSelectionModel().getSelectedItem(); //if clicked once, sets selected to appear
lv_left.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>(){
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val){
tooltip.setText(new_val);
int index = lv_left.getSelectionModel().getSelectedIndex();
//Here would be my switch statement for the array index
我最初是这样填充列表视图的:
ListView<String> lv_left = new ListView<>
(FXCollections.observableArrayList(cleric_cantrips));
这是我切换列表视图的时候:
levels.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>(){
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val){
String value = levels.getValue();
switch (value){
case "Caster Level": lv_left.getItems().clear(); lv_left.getItems().addAll(cleric_cantrips);
break;
case "Level 1": lv_left.getItems().clear(); lv_left.getItems().addAll(cleric_lvl_1);
break;
//etc.
这可行吗?由于我用lv_left.getItems().addAll(cleric_lvl_1); 更改列表中的项目,有没有办法可以创建if 语句或在我有索引的switch 语句的地方,所以如果它是cleric_cantrips然后使用该数组列表作为索引?还是我必须手动执行此操作并使用基于项目字符串的开关?两者都可以,但我觉得使用索引会更简洁,更短一些,而不是必须在 switch 中输入每个项目。
【问题讨论】:
-
实际上,看看我是如何设置的,将它放在一个由字符串而不是索引过滤的大型 switch 语句中会更容易和更有效,所以这就是我要做的。话虽如此,我将把这个问题留在这里,因为我仍然想知道我所问的内容是否可能供将来使用,以及其他可能有这个问题的人。
标签: java listview arraylist javafx switch-statement