JList - 选择多个项目

Posted

技术标签:

【中文标题】JList - 选择多个项目【英文标题】:JList - select multiple items 【发布时间】:2011-09-08 06:12:42 【问题描述】:

当我想在JList 中自动选择多个值时,我在JList 中遇到了这个setSelectedValue() 方法的问题,它仍然只选择了一个。有什么办法吗?

 String[] items =  "Item 1", "Item 2", "Item 3", "Item 4" ;
      final JList theList = new JList(items);
      theList.setSelectedValue("Item 1",true);
      theList.setSelectedValue("Item 2",true);

此代码仅显示选中的Item 2

【问题讨论】:

【参考方案1】:
list.getSelectionModel().setSelectionInterval(...);

或者如果选择不是连续的,那么你需要使用多个

list.getSelectionModel().addSelectionInterval(...);

【讨论】:

是的,没错,但我需要根据不在索引上的值来选择它们。对此有什么想法吗?【参考方案2】:

在调用JList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)后使用JList.setSelectedIndices(int[])

例如

import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
class MultiSelectList 
    public static void main(String[] args) throws Exception 
        File f = new File("MultiSelectList.java");
        InputStream is = new FileInputStream(f);
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        final ArrayList<String> lines = new ArrayList<String>();
        String line = br.readLine();
        while (line!=null) 
            lines.add(line);
            line = br.readLine();
        
        SwingUtilities.invokeLater(new Runnable() 
            public void run() 
                JList list = new JList(lines.toArray());
                list.setSelectionMode(
                    ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
                int[] select = 19, 20, 22;
                list.setSelectedIndices(select);
                JOptionPane.showMessageDialog(null, new JScrollPane(list));
            
        );
    

屏幕截图

【讨论】:

@Nirav 遵循这个 Java Swing 教程download.oracle.com/javase/tutorial/uiswing/components/… 以及java2s.com/Code/Java/Swing-JFC/List.htm +1 上的大量示例【参考方案3】:

当您使用 NetBeans GUI 编辑器时,您可以自定义为您的JList 生成的Post-Creation Code,如下所示。

【讨论】:

@Nirav:作为练习,将@Andrew Thompson 的示例与生成的代码进行比较。 现在的问题是每次第一个项目都显示为选中状态。否则它工作正常。 @Nirav:正确,还必须添加对setSelectedIndices() 的调用,如@Andrew Thompson 所示。【参考方案4】:
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;

class MultiSelectList 
    public static void main(String[] args) throws Exception 
        File f = new File("MultiSelectList.java");
        InputStream is = new FileInputStream(f);
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        final ArrayList<String> lines = new ArrayList<String>();
        String line = br.readLine();
        while (line!=null) 
            lines.add(line);
            line = br.readLine();
        
        SwingUtilities.invokeLater(new Runnable() 
            public void run() 
                JList list = new JList(lines.toArray());
                list.setSelectionMode(
                    ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
                int[] select = 19, 20, 22;
                list.setSelectedIndices(select);
                JOptionPane.showMessageDialog(null, new JScrollPane(list));
            
        );
    

【讨论】:

以上是关于JList - 选择多个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中的某些事件上取消选择Jlist项目

禁用 JList 中的项目

从 JLIST 中选择一个项目并使用来自该选定 id 的所有 db 信息更新一个表单

Java swing弹出菜单和jlist

JList 项中的自动换行

检索 JList 项的数组数据