2

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

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

谢谢您的帮助!

4

3 回答 3

2

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

在我的情况下,下拉菜单实际上确实出现了,但由于它不是那么大,因此它被绘制在对话框后面并不明显:) 所以如果您怀疑是这种情况,请通过使下拉菜单足够长以显示在下方来验证它隐藏它的组件。

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

希望能帮助到你。

于 2011-02-07T11:46:16.537 回答
1

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

所以我删除了所有我刚刚拥有一个带有 JDialog 的主方法的所有内容,其中只有一个 JComboBox。

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

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

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

于 2015-03-30T12:59:29.240 回答
0

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

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

于 2011-02-02T22:56:45.760 回答