【问题标题】:JList - select multiple itemsJList - 选择多个项目
【发布时间】: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

【问题讨论】:

    标签: java swing netbeans jlist multi-select


    【解决方案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));
                }
            });
        }
    }
    

    屏幕截图

    【讨论】:

    【解决方案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));
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2012-02-29
      • 1970-01-01
      • 2011-02-01
      • 2016-11-25
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多