2

JPanel 内に JComboBox があります (それ自体が他のいくつかの JPanel 内にネストされています)。列挙型のメンバーが取り込まれます。展開ボタンをクリックしてもポップアップ メニューが表示されないという問題が発生しています。

これまでに収集した情報は次のとおりです。

1) 展開ボタンを最初にクリックしても何も起こりません。2 回目のクリックでボックスの内容が強調表示されますが、ポップアップは表示されません。

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 が表示されたダイアログがモーダルだったことが原因でした。

私の場合、ドロップダウンは実際に DID 表示されますが、それほど大きくないため、ダイアログの後ろに描画されていることは明らかではありませんでした:) したがって、これが事実であると思われる場合は、ドロップダウンを十分に長くして、それを隠しているコンポーネント。

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

それが役に立てば幸い。

于 2011-02-07T11:46:16.537 に答える
1

私は同じ問題を抱えていて、何が悪いのか疑問に思っていました。通常は機能し、その種のバグは非常に重大であるためです。

そのため、JComboBox だけを含む JDialog を含む main-method をすべて削除しました。

すべてを削除した瞬間、自分が間違っていたことに気づきましgetRootPane()getContentPane()

私は通常、ダイアログを閉じるために ESC を使用し、KeyStroke を rootPane に追加します。それが私のうっかりミスの原因でした。

それが次の人がその間違いを犯すのに役立つことを願っています:)

于 2015-03-30T12:59:29.240 に答える
0

これがあなたのケースで起こっているかどうかはわかりませんが、UI 関連の問題の大部分は、UI コードがイベント ディスパッチ スレッドで実行されていないことが原因です。Swing では、すべてのコードをこのスレッドで実行することを義務付けています。そうしないと、GUI が正しく表示されない、イベントが正しく起動しないなどの問題が発生する可能性があります。このコードをすべてイベント ディスパッチ スレッドで実行している場合は、これを無視できます。それ以外の場合は、このリンクをチェックしてください:

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

于 2011-02-02T22:56:45.760 に答える