2

JComboBoxを実装するカスタム ポップアップでカスタムを作成しましたKeyListenerTabどちらかを押したときにcmbBoxのポップアップからアイテムを選択したかったので、コンボボックスとポップアップの両方Enterに設定しました。setFocusTraversalKeysEnabled(false)

このアプローチの問題はKeyListener、フォーカスを移動するためにコンテナーで使用するときに、コンボボックスに別のコンボボックスを追加する必要があることです。

カスタム JComponent 内で (仮説的に) フォーカス転送イベントまたはそのようなものを起動して、親コンポーネントにフォーカスを転送し、それを使用するすべての場所にキー リスナーを追加する必要がないようにすることはできますか? 使用transferFocus()しましたが、フォーカスが移っていません。

キーバインディングについてはまだ手を汚していませんが、フォーカスを移すためのキーバインディングはありますか?

ありがとう

sscce を再作成しようとしていますが、難しいことがわかります。我慢してください。

4

1 に答える 1

2

基本的なリスナーのライフサイクルは、本当に必要な場合は必要なリスナーを追加し、役に立たない場合はリスナーを削除しようとしています。

  • このリスナーはSwingJComponents用に指定されており、(KeyListenerの場合と同じように)このリスナーを具象JComponentまたはその派生物に追加できることを確認してください。

  • firePopupMenuWillBecomeVisibleの派生ポップアップにリスナーを追加できます

  • 派生したJListにItemListenerを追加できます

  • 正しい方法ではないかもしれませんが、KeyListenerに実装されているすべての欠陥を保護します。これは、Focusの所有者だけがキーボードからイベントを取得できるため、KeyBindingsの回避策は設定可能で快適です。

この回答をお読みください

于 2012-04-11T21:05:48.710 に答える