我刚刚开始学习GUI,所以我会为我的代码中的任何业余错误过早地道歉。
我一直在尝试为Jlist / JScrollPane窗口实现一个简单的搜索选项,该窗口突出显示包含search关键字的所有Jlist项。搜索几乎按照我的要求进行,除了列表中的第一项始终在每次新搜索中被选中,即使它不符合搜索条件。
这是搜索功能本身的代码片段(我尝试使用ArrayList而不仅仅是一个数组,希望能解决它,但它没有):
// Setup Search button/Assign Listener
JButton btSearch = new JButton("Search");
btSearch.addActionListener( (e) -> {
String input = tfSearch.getText();
int[] searchArray = new int[database.length];
ArrayList<Integer> searchList = new ArrayList<>();
for (int i=0; i<database.length; i++) //Search for entries that contain user input
{
if (database[i].contains(input))
{
searchList.add(i);
}
}
for (int i=0; i<searchList.size(); i++) //Convert ArrayList to Array
{
searchArray[i] = searchList.get(i);
}
lister.setSelectedIndices(searchArray);
});
答案 0 :(得分:1)
您创建一个具有JList大小的数组。所以它充满了零的零。然后用实际选定的索引覆盖数组的第一个元素。但阵列末尾仍然有零。
您需要创建一个仅包含所选索引的数组:
int[] searchArray = searchList.stream().mapToInt(Integer::intValue).toArray();
或者,如果您更喜欢while循环:
int[] searchArray = new int[searchList.size()];
for (int i = 0; i < searchList.size(); i++) {
searchArray[i] = searchList.get(i);
}