使用setSelectedIndices的JList搜索始终选择第一个项目

时间:2018-04-07 21:44:31

标签: java swing jframe jlist

我刚刚开始学习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);
        });

1 个答案:

答案 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);
}