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