JcomboBox множественный выбор - PullRequest
10 голосов
/ 12 декабря 2011

У меня в приложении есть jcombobox.и я хочу, чтобы он поддерживал множественный выбор (как в jlist).есть ли пример кода?

Ответы [ 2 ]

7 голосов
/ 12 декабря 2011

Я думаю, что это невозможно, если вы не используете JList, как вы сказали.

API JComboBox сообщает:

Пользователь может выбрать значение из раскрывающегося списка, который отображается на запрос пользователя.

И учебник по JComboBox :

Списки не очень привлекательны, но они более уместны, чем поля со списком, когда количество элементов велико (скажем, более 20) или когда выбор нескольких элементов может быть действительным.

Обновление:

Я рассмотрел этот ответ, потому что на самом деле это «возможно» сделать с помощью ListCellRenderer, добавив флажок для каждого элемента. Пожалуйста, рассмотрите этот ответ , чтобы реализовать это "решение".

Однако я не думаю, что это хорошая идея по следующим причинам:

  1. есть элемент управления, такой как JList, который допускает множественный выбор;
  2. элемент управления JComboBox предназначен только для выбора одного элемента;
  3. для меня не имеет смысла по-прежнему использовать элемент управления JComboBox и разрешать множественный выбор.
0 голосов
/ 19 декабря 2012

Это не совсем невозможно, но есть много работы, чтобы сделать работу.Вам нужно создать свои собственные классы, чтобы расширить / реализовать все это:

  • ListCellRenderer (так что вы можете пометить выбранные элементы, когда всплывающее окно показывает, и указать (по крайней мере), что есть несколько вариантов выбора, когда онэто не так).
  • JComboBox (очевидно)
  • BasicComboBoxUI (на самом деле это большая часть работы)
  • BasicListUI (по крайней мере, мне пришлось)
  • ComboBoxModel
И вам нужно будет разработать собственный класс, который реализует ItemListener, MouseListener, PopupMenuListener, MouseMotionListener, PropertyChangeListener, KeyListener, ListSelectionListener.
Подсказка: вам нужно переопределить много createXXisten() в классах пользовательского интерфейса для обхода множества мест, где отбрасываются множественные выборки.
[И он по-прежнему не допускает редактируемый комбинированный выбор.]
...