Как создать раскрывающийся список в Java Swing с нескольким выбором предметов?
-
30-09-2019 - |
Вопрос
Я в курсе JList
а также JComboBox
. Отказ Мне нужен функциональность выпадающего в поле «Комбо» с несколькими функциональными возможностями выбора, которая JList
предоставляет.
Это связано с тем, что содержимое списка слишком огромно, чтобы отображаться с помощью простого списка. Мне также нужно выбрать несколько предметов, в противном случае я бы был довольным JComboBox
.
Какие-либо предложения?
Решение
При использовании Multi-Select лучше использовать список, чем в поле «комбо». Как идут метафоры GUI, люди ожидают, что комбинированная коробка будет одиноким выбором, в то время как списки могут быть либо.
Содержимое списка слишком огромно отображаться с помощью простого списка
Место JList
в JScrollPane
. Отказ Вы можете позвонить setvisiblerowcount (int) на JList
Чтобы указать, сколько строк за один раз должно быть показано.
Другие советы
Вы можете сделать пользовательский рендер для Combobox и добавить флажки к этому компонентам, чтобы вы могли проверить и снизить их. Вы должны сделать что-то вроде этого:
public class MyComboBoxRenderer implements ListCellRenderer {
private String[] items;
private boolean[] selected;
public MyComboBoxRenderer(String[] items){
this.items = items;
this.selected = new boolean[items.lenght];
}
public Component getListCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int index) {
// Create here a JLabel with the text
// Create here a JCheckBox
// Add them to a layoutmanager
return this;
}
public void setSelected(int i, boolean flag)
{
this.selected[i] = flag;
}
}
Если ваши данные имеют иерархический характер, рассмотрите NetBeans ' Outline
компонент, обсуждаемый в Объявление о новой таблице дерева качелей и в этом отвечать. Отказ Вот то Текущая версия развития API.
Для достижения описанной функциональности я наконец решил «злоупотреблять» JMenuBar
и добавить к нему несколько JCheckBoxMenuItems
. Отказ GUI тогда отлично подходит цели (по крайней мере для меня), это просто обработка элемента, который рискует стать немного раздражать.
(Наконец, я определил немного логики над предметами, а затем может ограничить себя, чтобы обработать только один тип события)