我在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);
有没有人知道为什么弹出菜单可能不会出现?
感谢您的帮助!
答案 0 :(得分:1)
我在mac(10.5+)上遇到了Java(1.6)的类似问题 这是由于jCombobox出现的对话 模态的。
在我的情况下,下拉列表实际显示为DID,但因为它不是那么大 它是在对话框后面显示的并不明显,所以如果你 怀疑是这样的情况通过使下拉长度来验证它 足以显示隐藏它的组件下方。
希望它有所帮助。
答案 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