当我从数组中使用它作为参考时,为什么fxml变量不起作用?

时间:2014-05-14 22:03:27

标签: java variables reference javafx

我很懒,我决定在循环中添加一堆监听器到我的控件上。我注意到当我在字段中使用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>为什么它会像这样,有人能解释一下吗?

1 个答案:

答案 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