我有一个由arraylist填充的listview,以及一个组合框,当选择了项目时,清除listview并用不同的arraylist填充它。这很好用,但问题是,我已经设置好了,这样当在列表视图中选择一个项目时,它会根据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);
更改了列表中的项目,是否有一种方法可以在我获得索引的switch语句的情况下生成if
语句或其他内容,那么如果它cleric_cantrips
然后使用该arraylist作为索引?或者我是否必须手动执行此操作并使用基于项目字符串的开关?要么会工作,但我觉得使用索引而不是必须输入交换机中的每个项目会更简洁一点。
答案 0 :(得分:1)
你可以这样做:
if(lv_left.getItems().containsAll(cleric_cantrips)))
if(levels.getValue().equals("Caster level"))