JavaFX循环中的所有组件

时间:2017-11-20 12:21:20

标签: javafx fxml

我想在fxml中剪切我的代码。

fx1.textProperty().addListener((observable, oldValue, newValue)->{
    doThis();
});
fx2.textProperty().addListener((observable, oldValue, newValue)->{
    doThis();
});
fx3.textProperty().addListener((observable, oldValue, newValue)->{
    doThis();
});
fx4.textProperty().addListener((observable, oldValue, newValue)->{
    doThis();
});
fx5.textProperty().addListener((observable, oldValue, newValue)->{
    doThis();
});

我想要在这个组件中循环。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果这是一个全Java应用程序(或者如果这些控件是用Java创建的),你可以简单地在循环中创建它们并在创建它时注册监听器:

for (int i=0 ; i < 5 ; i++) {
    TextField fx = new TextField();
    fx.textProperty().addListener((obs, oldText, newText) -> doThis());
    somePane.getChildren().add(fx);
}

如果这些是FXML注射的,它们需要自己的身份。最短的代码可能是创建一个流:

Stream.of(fx1, fx2, fx3, fx4, fx5)
    .map(TextField::textProperty)
    .forEach(text -> text.addListener((obs, oldText, newText) -> doThis()));

另见adding elements defined in FXML to list with loop