JList - выбор нескольких элементов
У меня возникла проблема с этим методом setSelectedValue()
в JList
, когда я хотел автоматически выбрать несколько значений в 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);
Этот код показывает только Item 2
как выбрано.
Ответы
Ответ 1
Используйте 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<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));
}
});
}
}
Экранный снимок
![Screen shot of code]()
Ответ 2
list.getSelectionModel().setSelectionInterval(...);
или если выбор не последователен, вам нужно использовать несколько
list.getSelectionModel().addSelectionInterval(...);
Ответ 3
Когда вы используете редактор графического интерфейса NetBeans, вы можете настроить Post-Creation Code
, сгенерированный для вашего JList
, как показано ниже.
![post-creation dialog]()
Ответ 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));
}
});
}
}