JComboBox弹出菜单没有出现

我在JPanel中有一个JComboBox(它本身嵌套在其他一些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); 

有没有人知道为什么弹出菜单可能不会出现?

谢谢您的帮助!

我在mac(10.5+)上遇到了Java(1.6)的类似问题,这是由于jCombobox出现的对话框是模态的。

在我的情况下,下拉列表实际上是DID出现,但由于它不是那么大,它在对话框后面被绘制并不明显:)所以如果您怀疑这是个案,请通过使下拉列表足够长以显示在下方来validation它隐藏它的组件。

  • 使用许多项填充下拉列表。
  • 将其规范设置为在“getMaximumRowCount”上返回足够大的数字。

希望能帮助到你。

我有同样的问题,并想知道出了什么问题,因为通常它有效,而且那种错误非常关键。

所以我删除了所有我刚刚使用JDialog的主方法,其中只有一个JComboBox。

在我删除所有内容的那一刻,我意识到我做错了什么:我使用了getRootPane()而不是getContentPane()

我通常使用ESC来关闭对话框并将KeyStroke添加到rootPane。 这就是我不小心弄错的原因。

我希望这会帮助下一个犯这样的错误:)

我不确定你的情况是否会发生这种情况,但UI相关问题的很大一部分是由于UI代码没有在事件调度线程中运行。 Swing要求所有代码都应该在这个线程中运行,否则你可能会遇到GUI看起来不正确或事件没有正常启动等问题。如果你在事件调度线程中运行所有这些代码,那么你可以忽略这一点,否则看看这个链接:

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