2016-07-16 9 views
1

私はいくつかの助けが必要です。私はArrayListTextfieldを持っています。JavaFX TextFieldリスナー

static List<TextField> lfLetters = new ArrayList<>(); 

値が変更されているかどうかを確認したいと思います。それがあったのなら、私はそれがどのテキストフィールドであるかを知りたがっています。私はリスナーでこれを行うことができることを知っているが、それは単一のものに対してのみ働いた。

TextField textField = new TextField(); 
textField.textProperty().addListener((observable, oldValue, newValue) -> { 
    System.out.println("textfield changed from " + oldValue + " to " + newValue); 
}); 

私はそれが配列で動作し、どのテキストフィールドが変更されたかを判断します。

ありがとうございます!

答えて

2

リストするこのようにして、要素の指定されたプロパティの変更を自動的に監視します。これは、各テキストフィールドにリスナーを追加するよりも、より便利であるが、この場合には、あなたは古い値を取得することはできません。

ObservableList<TextField> oList = 
     FXCollections.observableArrayList(tf -> new Observable[]{tf.textProperty()}); 

    oList.addListener((ListChangeListener.Change<? extends TextField> c) -> { 
     while (c.next()) { 
      if (c.wasUpdated()) { 
       for (int i = c.getFrom(); i < c.getTo(); ++i) { 
        System.out.println("Updated index: " + i + ", new value: " + c.getList().get(i).getText()); 
       } 
      } 
     } 
    }); 
1

全く同じような質問hereがあるので、私はこのquesitonを重複としてマークすることを考えていました。

最後に、リスナーにもTextFieldへの参照が必要なので、回答を追加します。

このスニペットは、ArrayListに10 TextFieldオブジェクトを追加し、それぞれにリスナーを追加します。

for (int i = 0; i < 10; i++) { 
    TextField tf = new TextField(); 
    final int index = i; 
    tf.textProperty().addListener((obs, oldVal, newVal) -> { 
     System.out.println("Text of Textfield on index " + index + " changed from " + oldVal 
       + " to " + newVal); 
    }); 
    lfLetters.add(tf); 
} 

それともArrayListがすでに初期化されているあなた、あなたはiterate through単に可能であれば:

lfLetters.forEach(tf -> { 
    tf.textProperty().addListener((obs, oldVal, newVal) -> { 
     System.out.println("Text of Textfield on index " + lfLetters.indexOf(tf) + " changed from " + oldVal 
       + " to " + newVal); 
    }); 
}); 

サンプル出力あなたが適切な抽出とObservableListを使用して直接リスナーを追加することができます

Text of Textfield on index 2 changed from InitialText - 2 to ModifiedText - 2 
Text of Textfield on index 6 changed from InitialText - 6 to ModifiedText - 6 
+0

は、あなたは、単に '最終int型のインデックスを行うことにより、第1の例では、より効率的にインデックスにアクセスすることができます= i; 'リスナーを追加する直前。 –

+0

あなたはまったく正しいです、答えは更新されます。 – DVarga

関連する問題