2012-03-28 10 views
0

私は2つのJTextFieldのフォームを持っています:テキスト1テキスト2です。フォーカスを取得するJTextFieldを確認してください

各テキストフィールドにはフォーカスリスナーがあり、テキスト1とテキスト2にはそれぞれfocusLost()があります。

フォーカストラバーサルはtext1 - > text2です。

text2からフォーカスが失われると、text1とtext2が処理され、クリアされてからもう一度text1にフォーカスが設定されます。テキスト2オン

これは私のカスタムフォーカスリスナーです:

private class Text2FocusListener implements FocusListener{ 
    @Override 
    public void focusLost(FocusEvent arg0){ 
    if(arg0.isTemporary()){ 
     return; 
    } 
    process_input... 
    } 
} 

問題は、(つまり、テキスト1フィールド内のデータを修正する必要がある)場合は、ユーザーが戻ってテキスト1に(マウスやキーボードによる)をクリックする必要があると、焦点となってtext2からのデータが失われ、text1とtext2からの入力が処理されます。

if句では、私は何らかの形で焦点がtext1になることを確認する必要があり、どのようにわからないのですか。

他の誰かが同様の問題に対処しましたか?

+1

ている - あなたのスニペットのいずれかを表示されません;-)や他の言葉で:早いほど良いの助けのために、あなたが後にしている正確に何を示していSSCCEを表示しますあなたの期待がどのように満たされていないか、 – kleopatra

+0

if(arg0.isTemporary())... – 1ac0

+0

ダーン..もしかすると盲目でしたが、まだSSCCEは見えません。 – kleopatra

答えて

2
  1. フォーカス/ FocusSubsystemはかなりasynchrounousで、あなたはinvokeLater

  2. FocusListenerにrellatedコードをラップする必要がある場合に問題が発生する可能性がありますが、例えば、JTextComponentsに別のリスナーと一緒に追加されますItemListenerFocusListener

  3. が終了focusGained内のすべてのコードの後に​​のみ、必要なリスナーを追加し、focusLostにこれらのリスナーを削除し、end_lessループ、またはあまりにも一緒にCaretDocumentListenerとスタンジェの行動を引き起こし(編集可能)JComboBoxに追加しました

  4. なぜFocusListenerが必要なのでしょうか?なぜなら、2つのより良い代替案があるかもしれませんが、質問からは何も明らかではありません。SSCCE

+0

ad 1:はい、処理コードはinvokeLater()にありますが、これは問題とは関係ありません。 – 1ac0

+0

広告2:ちょうどこの1つのリスナーがJTextFieldにあります。この問題については知っていますが、問題には関係ありません。 広告3:それはかなりうまく動作します 広告5:見つからない、入力が最後の入力でフォーカスを失った後に検証する必要があります( "text2"フィールド) ad4: "text2"フィールドの後ろに1ピクセル幅のコンポーネントを置くと、次のコンポーネントがフォーカストラバーサルになります。 "text1"と "text2"はtext2の後に処理する必要があります。フォーカスが失われ、ユーザーが「text1」項目に戻ると、処理コードは処理されません。試してみると良いです.. – 1ac0

+0

これは私の学問のポイントへの学問的答えです、多分別の方法があります、SSCCE、 – mKorbel

1

FocusEventpublic Component getOppositeComponent()方法_if clause_

+1

私は自分自身に答えるつもりです:それは不可能です。実際、私は 'MyFocusTraversalPolicy extends FocusTraversalPolicy'クラスを実装することができ、' getComponentAfter() 'を通して次のコンポーネントを尋ねることができますが、これは"どのコンポーネントが実際にフォーカスを持っていますか? "はい、私は 'MyFocusTraversalPolicy'をどのコンポーネントがコンポーネントの前後にあるのか尋ねることができますが、コンポーネントからのフォーカスが失われた後、実際にどのコンポーネントがフォーカスを得るのかを知る方法はありません(私はマウスでクリックすることができますMyFocusTraversalPolicyで注文します)。 – 1ac0