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