java - 使用 setSelectedIndices 进行 JList 搜索始终选择第一项

标签 java swing jframe jlist

我刚刚开始学习 GUI,因此我会为我的代码中的任何业余错误过早地道歉。

我一直在尝试为 Jlist/JScrollPane 窗口实现一个简单的搜索选项,该选项突出显示包含搜索关键字的所有 Jlist 项目。搜索几乎按照我想要的方式工作,除了列表中的第一项始终在每个新搜索中被选择这一事实之外,即使它不符合搜索条件。

这是搜索函数本身的代码片段(我尝试使用 ArrayList 而不是仅仅使用 Array,希望这能解决问题,但没有):

    // 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);
        });

最佳答案

您创建一个具有 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);
}

关于java - 使用 setSelectedIndices 进行 JList 搜索始终选择第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712255/

相关文章:

java - 编写一个接受列表的减法循环

java - Android Parcelable 对象不能在 Activity 之间正确传递

java - 为什么 Java 的 Gtk Look And Feel Pop Ups 没有边框?

java - 使用两个 JFrame slider 作为最小值和最大值 setter ,如何也只允许最小值达到最大值?

java - 重新初始化 spring @Autowire bean

java - 在 Java GUI 中为每个字段插入一个新行

java - JFrame 在处理另一个事件时不响应事件

java - 使用 Graphics2D 绘制图像

java - 为什么 JMenu 不总是在最前面?

java - JDBC 无法登录 LocalDB 实例,但在 SSMS 中我可以登录