JList – 选择多个项目

当我想在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

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

例如

 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 lines = new ArrayList(); 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)); } }); } } 

屏幕截图

屏幕截图的代码

 list.getSelectionModel().setSelectionInterval(...); 

或者如果选择不连续,则需要使用多个

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

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

创作后对话框

 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 lines = new ArrayList(); 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)); } }); } }