2011-02-02 163 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