2017-01-14 15 views
0

複数のテキストフィールドを1つのフォーカスリスナーに追加して実行しようとしていますが、現在はテキストフィールドを追加していますが、複数のテキストフィールドを1つのフォーカスリスナーに追加する

+0

は、スタックオーバーフローへようこそ! [ツアー](http://stackoverflow.com/tour)を見て回り、[ヘルプセンター](http://stackoverflow.com/help)、特に[どのように私に質問しますか良い質問?](http://stackoverflow.com/help/how-to-ask)と[ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)。 –

答えて

2

私は、各テキストフィールドのフォーカスリスナーを作成するよりも良い方法だと思います。

通常THA ANSERは次のとおりである: "...それが依存"

が、あなたのケースでIdは言う:各テキストフィールドには独自のリスナー(インスタンス)を持つべきです。 理由は、テキストフィールドの内容を変更するためです。 これを行うのは、1つのリスナーインスタンスだけで、イベントが発生したときにいつもすべてのテキストフィールドを変更するか、または影響を受けるテキストフィールドがないか、別のテキストフィールドを追加する場合はif/elseカスケードに新しいエントリが必要です。

私はあなたがそれをパラメータとしてTextFieldを与えるリスナーの名前の内部クラスを作成することを示唆している:

class MyTextFiledFocusListener implements FocusListener { 
    private final JTextFiled textField; 
    MyTextFiledFocusListener(JTextFiled textField){ 
    this.textField = textField; 
    textField.addFocusListener(this); 
    } 
    public void focusGained(FocusEvent e) 
    { 
    textField.setText(""); 
    } 

    public void focusLost(FocusEvent e) 
    { 
    // nothing 
    } 
} 

とビットあなたがへの変更投稿:

new MyTextFiledFocusListener(JT_id); 

だけのためにレコード:

かなり多くのメソッドを持つスイング関連のインターフェイスは、デフォルトのIMを持っています空のメソッドを持つplement(の既定のメソッドのpre java8ソリューション)はFocusListenerです。これらのデフォルト実装は通常*Adapterと呼ばれます。したがって、あなたがFocusAdapterを拡張するとき、あなたのコードを短くすることができFocusListenerを実装するのでinsted:

class MyTextFiledFocusListener extends FocusAdapter { 
    private final JTextFiled textField; 
    MyTextFiledFocusListener(JTextFiled textField){ 
    this.textField = textField; 
    textField.addFocusListener(this); 
    } 
    public void focusGained(FocusEvent e) 
    { 
    textField.setText(""); 
    } 
} 
+0

先生、ありがとうございます。 –

1

このようなものはどうですか?クリックしながら

FocusListener clearFields = new FocusListener() { 
public void focusGained(FocusEvent e) 
{ 
    JT_id.setText(""); 
    JT_name.setText(""); 
    JT_add.setText(""); 
    JT_cno.setText(""); 
    JT_email.setText(""); 
} 

public void focusLost(FocusEvent e) 
{ 
    // nothing 
} 
}); 

JT_id.addFocusListener(clearFields); 
JT_name.addFocusListener(clearFields); 
JT_add.addFocusListener(clearFields); 
JT_cno.addFocusListener(clearFields); 
JT_email.addFocusListener(clearFields) 

あなたはまだ他の人に焦点を当てて/それらのすべてをクリアします/クリックする最初のもの(JT_id)に焦点を当てたような状況を回避するために、テキストフィールドのすべてにフォーカスリスナーを追加する必要があります何もしません。

代替案 - 各テキストフィールドにそのフィールドのみをクリアするフォーカスリスナーを割り当てます。

+0

先生、すべてのテキストフィールドにフォーカスリスナーを追加せずに特定のフィールドをクリアする方法はありませんか? –

+0

unfortunatelly no。あなたがクリックしたフィールド(フォーカスを得たフィールド)をクリアしたいと思っていましたが、そうでない場合は、コメントを残して質問を更新してください。さもなければ、 "unfortuantelly no"コメントが適用されます。 – Shark

関連する問題