2010-05-18 1 views
5

Я знаю JList и JComboBox. Мне нужна функция выпадающих списков со множеством функций выбора, которые предоставляет JList.Как создать раскрывающийся список в java swing с выбором нескольких элементов?

Это потому, что содержимое списка слишком велико, чтобы отображаться с помощью простого списка. Мне также нужно выбрать несколько элементов, иначе я бы доволен JComboBox.

Любые предложения?

ответ

7

При использовании multi-select лучше использовать список, чем поле со списком. По мере того, как метафоры GUI идут, люди ожидают, что поле со списком будет единственным, тогда как списки могут быть либо.

содержимое списка слишком огромен, чтобы отобразить с помощью простого списка

Поместите JList в JScrollPane. Вы можете позвонить setVisibleRowCount(int) по адресу JList, чтобы указать, сколько строк должно быть показано.

3

Вы можете создать собственный рендеринг ящиков для выпадающего списка и добавить флажки к этим компонентам, чтобы вы могли их проверить и снять. Вы должны сделать что-то вроде этого:

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

} 
+0

Этот класс должен расширяющий некоторые подтипы 'Component' для того, чтобы сделать тип возвращаемого значения 'getListCellRendererComponent()', если вы хотите «вернуть это;». Если вы хотите вернуть созданный вами ярлык, все в порядке с оригиналом (так что я действительно не понимаю). И откуда этот 'setSelected()'? Лучше всего опубликовать весь код. – FaithReaper

0

Для достижения описанной функциональности я, наконец, решил «оскорбить» JMenuBar и добавить к нему несколько JCheckBoxMenuItems. Графический интерфейс тогда идеально подходит для цели (по крайней мере для меня), это просто обработка ItemEvent, которая рискует стать немного раздражающей.

(наконец, я определил некоторую битную логику над элементами, а затем может ограничивать себя обработку только один тип события)

Смежные вопросы