- ベストアンサー
アクティブなTextFieldを検出
<質問> 例えばJFrameの中にJTextFieldが3つあったとします。現在どのJTextFieldにフォーカスがあたっている(アクティブになっている)のか調べたい場合どのようなメソッドを使用すればよいのでしょうか?ちなみにhasFocusメソッドでやってみると常にfalseが返ってきます。 <環境> windows2000 j2sdk1.4.1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
常にfalseが返ってくるというのは、おそらくはフレームが まだ表示される前に呼び出しをしているからだと思います。 コンポーネント表示前にはフォーカスは当たらないので注意 が必要です。 質問である、現在のフォーカスが当たっているコンポーネント の取得方法ですが、一番簡単なのはFocusListenerを使う方法 ではないでしょうか。 ・まずはJFrameにFocusListenerを追加。 class MyFrame extends JFrame implements FocusListener{ ・次に、focusGained(),focusLost()を実装。 public void focusGained(FocusEvent fe){ System.out.println(fe.getComponent().getName()+" FocusGained"); } public void focusLost(FocusEvent fe){ System.out.println(fe.getComponent().getName()+" FocusLost"); } 実装内容は用途に合わせて変更して下さい。 ・JTextFieldの初期化時の設定。 JTextField tf1, tf2, tf3 ; tf1=new JTextField(); tf1.setName("TextField-1"); tf1.addFocusListener(this); tf2=new JTextField(); ・ ・ ・ とする事でフォーカス変更を調べる事が出来ると思います。
お礼
レスポンスの速さに驚きました。回答ありがとうございます。アドバイスいただいたやり方で収得できました。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test extends JFrame{ private JTextField tf1 = new JTextField(); private JTextField tf2 = new JTextField(); public Test() { JPanel p = new JPanel(); tf1.setName("TEST1"); tf1.addFocusListener(new FocusAdapter(){ public void focusGained(FocusEvent fe){ String name = fe.getComponent().getName(); System.out.print(name); } }); tf1.setPreferredSize(new Dimension(100,20)); tf1.setMaximumSize(new Dimension(100,20)); tf1.setMinimumSize(new Dimension(100,20)); p.add(tf1); tf2.setName("TEST2"); tf2.addFocusListener(new FocusAdapter(){ public void focusGained(FocusEvent fe){ String name = fe.getComponent().getName(); System.out.print(name); } }); tf2.setPreferredSize(new Dimension(100,20)); tf2.setMaximumSize(new Dimension(100,20)); tf2.setMinimumSize(new Dimension(100,20)); p.add(tf2); getContentPane().add(p, java.awt.BorderLayout.CENTER); pack(); } public static void main(String[] args) { Test test = new Test(); /* 終了処理を追加 */ test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); /* 実際に表示する */ test.setVisible(true); } } ありがとうございました