Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFXTextField侦听器_Java_Arraylist_Javafx_Textfield - Fatal编程技术网

JavaFXTextField侦听器

JavaFXTextField侦听器,java,arraylist,javafx,textfield,Java,Arraylist,Javafx,Textfield,我需要一些帮助。我有一个ArrayList的Textfields static List<TextField> lfLetters = new ArrayList<>(); 我希望它在一个数组上工作,并确定哪个textfield已更改 提前谢谢 我想我会把这个问题标记为一个重复的问题,因为你有一个完全相似的问题 但最后,您希望在侦听器中也有对TextField的引用,因此我将添加一个答案 此代码段将10个TextField对象添加到ArrayList中,并为每个对象添

我需要一些帮助。我有一个
ArrayList
Textfield
s

 static List<TextField> lfLetters = new ArrayList<>();
我希望它在一个数组上工作,并确定哪个textfield已更改


提前谢谢

我想我会把这个问题标记为一个重复的问题,因为你有一个完全相似的问题

但最后,您希望在侦听器中也有对
TextField
的引用,因此我将添加一个答案

此代码段将10个
TextField
对象添加到
ArrayList
中,并为每个对象添加一个侦听器

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);
}
样本输出


您可以使用带有适当提取器的
ObservableList
,并将侦听器直接添加到列表中。这样,它将自动监视其元素的指定属性中的更改。这比向每个文本字段添加侦听器更方便,但在这种情况下,您无法获得旧值:

    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());
                }
            }
        }
    });
observeList-oList=
FXCollections.observearraylist(tf->newobserveable[]{tf.textProperty()});

oList.addListener((ListChangeListener.ChangeNote)在第一个示例中,只需在添加侦听器之前立即执行
final int index=i;
即可更有效地访问索引。
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);
    });
});
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
    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());
                }
            }
        }
    });