2010-12-06 7 views
2

私はAppというJavaアプリケーションを持っています。アプリケーションは時折、というmyFrameというJFrameを表示します。また、JDialogまたはJFrameのいずれかに含まれているJTextAreaも表示されます(どちらかはわかりませんが、この質問に答える必要があるかどうかわかります)。このJTextAreaを "myTextArea"としましょう。フォーカスを失うように見えてもキーストロークを受信し続ける

は今、次の一連のイベントが発生します。

  1. を私たちはMyFrameとを表示します。それは焦点があり、あなたはそれを入力することができます。
  2. myFrame.setVisible(false)を呼び出す
  3. myTextAreaが表示されます。
  4. myTextArea.requestFocus()を呼び出します。
  5. myTextAreaにフォーカスがあります(カーソルが点滅しています)が、入力されたすべてのキーストロークはmyFrameに送信されます。

myTextAreaはmyFrameに含まれていないことに注意してください。

ここでは何が起こっていますか?目に見えないJFrameがキーストロークを受信して​​いると聞いたことがありますか?キーストロークを受信するだけでなく、フォーカスを持っている他のコンポーネントからそれらを盗みますか?

+3

決して見られません。問題を示すSSCCE(http://sscce.org)を投稿してください。 – camickr

+0

私はこのために私のSSCCEを投稿するのが好きです。しかし、それは巨大なアプリケーションです、そして、それは時間がかかるかもしれません。 –

+2

すぐに適切な解決策が見つからない場合は、SSCCEにあなたのアプリを怒らせるのにかかる時間は、十分に時間を費やすかもしれません。あなたがこれを行うと、あなたは問題と解決策を自分で見つけ出し、私たちの助けも必要ないと私は予測します。 –

答えて

1

基本的に問題の原因がわかりました。 MyFrameは、KeyEventDispatcherを実装するクラスMyKeyEventHandlerを持ちます。 dispatchKeyEvent(KeyEvent e)メソッドは、myTextAreaを対象とするキーストロークに対しても常にfalseを返します。したがって、キーストロークはmyTextAreaに達しません。

+0

フォローアップをありがとう。 1 + rep。 –

0

視認性を切り替えることではありません。 JFrameは最初に初期化され、まだフォーカスがあります。あなたはそれを見えなくするだけで、そこから焦点を外すことはありません。

さらに、JTextBoxには親コンテナが必要です。おそらく

myFrame.add(myTextArea);

が有効です。フォーカスをJTextAreaに移動するには、次のようにします。

myTextArea.requestFocus();

+0

TextAreaのTextBoxについてお詫び申し上げます。 – r3st0r3

+0

myTextArea.requestFocus()を呼び出すことは問題を修正することではありません(ただし、修正の必要な部分かもしれません)。 –

+1

フレームを非表示にすると、OSはデスクトップ上のどのウィンドウにフォーカスを当てるかを決定します。私は "requestFocus"を使用して問題を解決することはできませんが、それが間違った方法であるフォーカスの問題であっても疑問です。適切なメソッドの使用方法については、requestFocusメソッドAPIの説明を参照してください。 – camickr

関連する問題