JComboBox弹出菜单没有出现

时间:2011-02-02 22:47:49

标签: java swing jcombobox popupmenu

我在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);

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

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

在我的情况下,下拉列表实际显示为DID,但因为它不是那么大 它是对话框后面显示的并不明显,所以如果你 怀疑是这样的情况通过使下拉长度来验证它 足以显示隐藏它的组件下方。

  • 用许多填充下拉列表 项目。
  • 将其规范设置为返回a 数量足够大 “getMaximumRowCount”。

希望它有所帮助。

答案 1 :(得分:1)

我遇到了同样的问题,并且想知道出了什么问题,因为通常它会起作用,而且那种错误非常关键。

所以我删除了一些我只有一个带有JComboBox的JDialog的main方法的内容。

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

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

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

答案 2 :(得分:0)

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

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