2011-02-02 12 views
2

JPanelの中​​にJComboBoxがあります.JComboBox自体は他のJPanelの中​​に入れ子になっています。それはenumのメンバーで構成されています。展開ボタンをクリックしたときにポップアップメニューが表示されないという問題が発生しています。JComboBoxのポップアップメニューが表示されない

1)何もしません拡張ボタンの最初のクリック:

は、ここで私はこれまでに収集した情報です。 2回目のクリックでボックスの内容が強調表示されますが、ポップアップは表示されません。

2)ボタンをクリックしてフォーカスを与えたら、上下キーで項目を正しく循環させます。

3)私はイベントをプリントアウトするのPopupMenuListenerを追加しようとした、とイベントが原因不明の方法で火災:

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

は誰のことを行います。

mouse down: popupMenuWillBecomeVisible fires 
mouse up: nothing 
mouse down: popupMenuWillBecomeInvisible fires 
mouse up: nothing 

ここJComboBoxのための私の初期化コードですポップアップメニューが表示されない理由を知っていますか?

ありがとうございました!

+2

ポストあなたのSSCCE(http://sscce.org)問題を示しています。 – camickr

答えて

0

あなたのケースではこれが起こっているのかどうかはわかりませんが、UI関連の問題の大部分は、イベントディスパッチスレッドでUIコードが実行されていないためです。スイングでは、このスレッドですべてのコードを実行する必要があります。そうでない場合は、正しく表示されていないGUIや正しく起動していないイベントなどが発生する可能性があります。このコードをすべてEvent Dispatching Threadで実行している場合は、そうでない場合は、このリンクをチェックアウト:

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

1

私はMac上のJava(1.6)とsimilair問題(X 10.5+) を持っていたし、それはJComboBoxが登場対話によるものであったことは モーダルました。

ドロップダウンが実際に表示されました私の場合は

が、これはケースが作ってそれを検証することができ 疑わしいので、もしダイアログ:)の後ろに延伸したこと、それは明らかではなかった それほど大きくはなかったとしてドロップダウンは、それを隠しているコンポーネントの下に表示するには十分に長い です。

  • 多くの アイテムをドロップダウンに入力します。
  • "getMaximumRowCount"に十分大きな数字の を返すように仕様を設定します。

希望します。

1

私は同じ問題を抱えていて、何が間違っているのだろうと思っていました。なぜなら、通常はうまくいき、その種のバグは非常に重大なものになるからです。

私は、JDialogでメインメソッドを持っていたものすべてを削除しました。その中にJComboBoxだけがあります。

私がすべてを削除した瞬間、間違っていたことが分かりました:の代わりにgetContentPane()を使用しました。

私は通常、ダイアログを閉じてKeyStrokeをrootPaneに追加するためにESCを使用します。それが私の不注意なミスの理由でした。

は、私はその間違いをして次のものを助けることを願っています。)

+0

OMG、私は何ヶ月も苦労してきました! (うまくいけば内部アプリケーションに)。トップレベルのウィンドウ(私にとっては 'JFrame'でした)では' getContentPane() 'が実際には' getRootPane() 'の代わりに呼び出されます。 – Matthieu

関連する問題