Всплывающее меню JComboBox не отображается - PullRequest
2 голосов
/ 03 февраля 2011

У меня есть JComboBox внутри JPanel (который сам вложен в несколько других JPanel). Это заполнено членами перечисления. Я столкнулся с проблемой, когда всплывающее меню не появляется, когда я нажимаю кнопку расширения.

Вот информация, которую я собрал до сих пор:

1) Первый щелчок по кнопке расширения ничего не делает. Второй щелчок выделяет содержимое поля, но всплывающее окно по-прежнему не отображается.

2) После того, как я нажал кнопку и наделил ее фокусировкой, нажатия клавиш вверх / вниз циклически переключают записи.

3) Я попытался добавить PopupMenuListener для распечатки событий, и события происходят необъяснимым образом:

mouse down: popupMenuWillBecomeVisible fires
mouse up: nothing
mouse down: popupMenuWillBecomeInvisible fires
mouse up: nothing

Вот мой код инициализации для JComboBox:

comboBox = new JComboBox();
comboBox.setPreferredSize(new Dimension(175, 30));
comboBox.setMaximumSize(new Dimension(175, 30));
comboBox.setAlignmentX(0.5f);

comboBox.addItem(Enum.Value1);
...     

parentPanel = new JPanel();
parentPanel.setLayout(new BoxLayout(parentPanel, BoxLayout.X_AXIS));
parentPanel.setMaximumSize(new Dimension(37267, 50));

... add some other stuff to parentPanel ...

parentPanel.add(comboBox);

Кто-нибудь знает, почему всплывающее меню может не отображаться?

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

У меня была проблема similair с Java (1.6) на Mac (10.5+) и это было из-за диалога, в котором появился jCombobox модальный.

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

  • заполнить раскрывающийся список многими товар.
  • установить его спецификацию для возврата достаточно большое число на "GetMaximumRowCount".

Надеюсь, это поможет.

1 голос
/ 30 марта 2015

У меня была та же проблема, и мне было интересно, что не так, потому что обычно она работает, и такого рода ошибки будут очень и очень критичны.

Поэтому я удалил все, что у меня было, с помощью основного методаJDialog с JComboBox внутри.

В тот момент, когда я удалил все, я понял, что сделал неправильно: я использовал getRootPane() вместо getContentPane().

Я обычно использую ESCдля закрытия диалога и добавления KeyStroke в корневую панель.Это было причиной моей неосторожной ошибки.

Я надеюсь, что это поможет следующим, сделавшим эту ошибку:)

0 голосов
/ 03 февраля 2011

Я не уверен, что это происходит в вашем случае, но значительная часть проблем, связанных с пользовательским интерфейсом, связана с тем, что код пользовательского интерфейса не запускается в потоке диспетчеризации событий. Swing требует, чтобы весь код запускался в этом потоке, иначе у вас могут возникнуть проблемы с неправильным отображением графического интерфейса или с неправильным срабатыванием событий и т. Д. Если вы выполняете весь этот код в потоке диспетчеризации событий, то вы можете игнорировать это в противном случае проверьте эту ссылку:

http://download.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

...