Java JList-选择多个项目

Java JList-选择多个项目,java,swing,netbeans,jlist,multi-select,Java,Swing,Netbeans,Jlist,Multi Select,我在JList中遇到了这个setSelectedValue()方法的问题,当我想在JList中自动选择多个值时,它仍然只选择了一个。有办法吗 String[] items = { "Item 1", "Item 2", "Item 3", "Item 4" }; final JList theList = new JList(items); theList.setSelectedValue("Item 1",true); theList.setSelecte

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

 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);
此代码仅显示所选的
项目2

list.getSelectionModel().setSelectionInterval(...);
或者,如果选择不是连续的,则需要使用多个

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

调用
JList.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION)后,使用
JList.setselectedDices(int[])

例如。
import javax.swing.*;
导入java.io.*;
导入java.util.ArrayList;
类多选列表{
公共静态void main(字符串[]args)引发异常{
文件f=新文件(“MultiSelectList.java”);
InputStream is=新文件InputStream(f);
InputStreamReader isr=新的InputStreamReader(is);
BufferedReader br=新的BufferedReader(isr);
最终ArrayList行=新ArrayList();
String line=br.readLine();
while(行!=null){
行。添加(行);
line=br.readLine();
}
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JList list=新的JList(lines.toArray());
list.setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
int[]select={19,20,22};
列表。设置选定的骰子(选择);
showMessageDialog(null,新的JScrollPane(列表));
}
});
}
}
截屏

使用NetBeans GUI编辑器时,您可以自定义为
JList
生成的
创建后代码,如下所示

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));
            }
        });
    }
}
导入javax.swing.*;
导入java.io.*;
导入java.util.ArrayList;
类多选列表{
公共静态void main(字符串[]args)引发异常{
文件f=新文件(“MultiSelectList.java”);
InputStream is=新文件InputStream(f);
InputStreamReader isr=新的InputStreamReader(is);
BufferedReader br=新的BufferedReader(isr);
最终ArrayList行=新ArrayList();
String line=br.readLine();
while(行!=null){
行。添加(行);
line=br.readLine();
}
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JList list=新的JList(lines.toArray());
list.setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
int[]select={19,20,22};
列表。设置选定的骰子(选择);
showMessageDialog(null,新的JScrollPane(列表));
}
});
}
}

是的,这是正确的,但我需要根据值而不是索引来选择它们。你对此有什么想法吗?@Nirav遵循本Java Swing教程和大量的示例+1@Nirav:作为练习,将@Andrew Thompson的示例与生成的代码进行比较。现在的问题是,每次第一项都显示为选中。否则它可以正常工作。@Nirav:正确,还必须添加对
setSelectedDices()
的调用,如@Andrew Thompson所示。
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));
            }
        });
    }
}