在控制器和FXML文件中手动输入fx:id
和后期绑定是潜在的错误来源,破坏了代码的健壮性(我的个人意见)。
另一方面,它提供了灵活性。
有没有一种方法可以在运行时显示错误之前对绑定进行校对并识别错误,或者这是“按设计”工作流程,您必须在编码时做些什么并且要小心?
编辑
我正在使用Eclipse与e(fx)clipse和Gluon Scene Builder
答案 0 :(得分:1)
据我所知,没有真正的"证据"就像抱怨的javac
一样。 JavaFx对此过于动态。您可以做的最好的事情是将控制器添加到您的FXML文件中,如此
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<ScrollPane xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.myapp.MyController">
<content>
...
</content>
</ScrollPane>
然后允许Eclipse
或IntelliJ
(thx @silifly)向您显示有关尚未绑定到控制器的元素的警告。这不会告诉FXMLLoader
执行的注射是否成功。然后,您可以在初始化阶段检查您的元素是否已正确注入。
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
public class MyController implements Initializable {
@FXML
private Button btnLogin;
@Override
public void initialize(URL location, ResourceBundle resources) {
assert btnLogin != null : "fx:id=\"btnLogin\" was not injected: check your FXML file 'MyView.fxml'.";
}
}
这些是我所知道的两个设施,并且用它来检查是否所有设置都正确。
编辑:
我刚刚看到你可以写you don't need to implement the interface anymore
@FXML
public void initialize() {
...
}