我很懒,我决定在循环中添加一堆监听器到我的控件上。我注意到当我在字段中使用fxml变量时
@FXML
private TextField profileNameField = new TextField();
并向其添加处理程序
profileNameField .setOnKeyReleased(new CustomEventHandler(profileNameField, l1) {
Pattern pattern = Pattern.compile(regexes[0],
Pattern.DOTALL);
Matcher matcher;
@Override
public void handle(Event event) {
System.out.println("handling");
String text = this.control.getText();
matcher = pattern.matcher(text);
if (matcher.matches()) {
verifyed();
} else {
failedToVerify();
}
}
});
一切正常。 我把它们串成阵列时发芽了
private TextInputControl[] textControls = {
profileNameField,....
并使用参考
textControls[0].setOnKeyReleased(new CustomEve..
突然之间没有任何影响。这是为什么?我把我的应用程序从摇摆中移除所有工作在那里萌芽javafx似乎在这方面有点不同。这不是那么大的交易我已经做了非懒惰的方式。我的fx应用程序完美出于好奇,< strong>为什么它会像这样,有人能解释一下吗?
答案 0 :(得分:2)
以这种方式定义时:
@FXML private TextField profileNameField = new TextField();
指定的值永远不是用户,将由FXMLLoader重写。
所以数组初始化的值不正确,在profileNameField
由FXMLLoader初始化后,在initialize
方法中初始化它(是的,我认为,英文应该在这个答案中编辑:)):( p>
public class <Controller name> implements javafx.fxml.Initializable { // necessary
...
private TextInputControl[] textControls;
@FXML private TextField profileNameField;
...
public void initialize(URL url, ResourceBundle resourceBundle) {
textControls = {
profileNameField,
...
};
...
}
...
}
请参阅http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#controllers