2011-02-02 152 views
2

我在JPanel内部有一个JComboBox(它本身嵌套在其他几个JPanel中)。它由一个枚举成员组成。我遇到了点击展开按钮时弹出式菜单没有出现的问题。JComboBox弹出式菜单没有出现

这里是我到目前为止所收集的信息:

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

有谁有任何想法为什么弹出菜单可能不会出现?

感谢您的帮助!

+2

安置自己的SSCCE(http://sscce.org)演示该问题。 – camickr 2011-02-03 01:58:14

回答

0

我不确定这是否发生在您的案例中,但很大一部分与UI相关的问题是由于UI代码未在Event Dispatching Thread中运行。 Swing要求所有的代码都应该在这个线程中运行,否则你可能会遇到图形用户界面看起来不正确或者事件没有正常启动等问题。如果你在事件分派线程中运行所有这些代码,那么你可以忽略这个,否则签出此链接:

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

1

我已经与Java(1.6)的similair问题上的MAC(1050 +) ,这是由于对话框JComboBox时出现了 模式。

在我的情况下拉实际上没有出现,但因为它没有那么大 这一点不明确,它被画背后对话框:)所以如果你 怀疑这是这种情况通过使验证下拉为 的长度足以出现在隐藏它的组件下方。

  • 填充许多 项目的下拉菜单。
  • 将其规范返回 “012MaximumRowCount”上的数字足够大。

希望它能帮助。

1

我有同样的问题,并想知道什么是错的,因为通常它的工作原理,这种错误将非常非常关键。

因此,我删除了一切,我只有一个JDialog的主要方法,只有一个JComboBox。

当我删除了所有的东西,我意识到我做错了:我用getRootPane()而不是getContentPane()

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

我希望这将有助于在未来的人做这样的错误:)

+0

OMG,我一直在挣扎几个月! (希望在内部申请)。在顶层窗口(这是我的JFrame)中,getContentPane()确实被调用,而不是`getRootPane()`。 – Matthieu 2017-10-11 17:30:07