我想在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();
});
我想要在这个组件中循环。有什么建议吗?
答案 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()));