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 - 选择多个项目的主要内容,如果未能解决你的问题,请参考以下文章