首页 > 解决方案 > 添加新项目后,如何在列表中保持选中框?

问题描述

我试图弄清楚如何在输入后将输入到我的列表中的新数据框变成选定的框。我实现了 getSelectionModel() 方法,可以单击列表中的任何项目,但我希望在添加新数据后选择我输入的新数据(周围有蓝色/灰色框)。我有这段代码可以将新数据添加到列表中,但我不确定是否listView.getSelectionModel().select(name);是获得我想要的结果的方法。

String newLine = name + "," + artist + "," + year + "," + album;
obsList.add(name.trim() + " " + artist.trim());
writeToFile(newLine);
nameBox.setText(name);
artistBox.setText(artist);
albumBox.setText(year);
yearBox.setText(year);
listView.getSelectionModel().select(name); //this is what I added to try to select the box after I added  new info
sortOBS();

这就是我在运行代码时弹出列表的方式。

这就是我在运行代码时弹出列表的方式。

这是我输入新数据后我的列表的样子。

添加歌曲后,它只会突出显示先前的选择。 我希望突出显示新歌。

我希望在添加到列表后选择我输入的新数据。换句话说,如何在输入新数据后让我添加的项目被选中(周围的蓝色/灰色框)?

标签: javalistjavafx

解决方案


您的代码不起作用,因为该select()方法采用一个整数来描述元素的索引,而不是实际元素。

您需要保留刚刚添加的元素,以便以后可以找到索引。而不是像这样匿名添加元素:

obsList.add(name.trim() + " " + artist.trim());

命名元素,然后添加它,如下所示:

String entry = name.trim() + " " + artist.trim();
obsList.add(entry);

现在,而不是这个:

listView.getSelectionModel().select(name); // wrong

你可以这样做:

listView.getSelectionModel().select(obsList.indexOf(entry));

您可能更喜欢有点懒惰并假设每个新条目的索引。由于您只是obsList.add()不指定位置,这意味着您总是添加到列表的末尾。新添加元素的索引将始终为obsList.size() - 1,因此您可以这样做:

listView.getSelectionModel().select(obsList.size() - 1);

推荐阅读