如何在 JavaFX 8 中捕获 TableView 的创建
How to catch TableView creation in JavaFX 8
我有一个带有 TableView 的 JavaFX 应用程序,我需要在应用程序启动后填充数据。我以下列方式启动应用程序:
private LayoutController theController;
@Override
public void start(Stage primaryStage)
{
try {
FXMLLoader fxmlload = new FXMLLoader(getClass().getResource("Sample.fxml"));
BorderPane root = (BorderPane )fxmlload.load();
Scene scene = new Scene(root,640,480);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
theController = (LayoutController )fxmlload.getController();
primaryStage.setTitle("Title Application");
primaryStage.addEventHandler(WindowEvent.WINDOW_SHOWN,theController.windowStarted);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
在我的名为 SampleController 的控制器中,我有 TableView 对象,以便它(最初)在启动后创建一些列:
@FXML Parent myRoot;
@FXML TableView datTable<DataClass>;
private Stage theStage;
public EventHandler<WindowEvent> windowStarted = event -> {
theStage = (Stage )myRoot.getScene().getWindow();
getData();
};
protected void getData()
{
dataTable.setEditable(false);
.
// Call a SOAP service to get the data
.
}
我曾假设一旦舞台的 WINDOW_SHOWN 事件发生,控件就会被创建,我可以用它们做一些事情。显然不是这样。显然,使用 FXML 指定的控件实际上是在 主应用程序 window 创建之后 创建的!
当执行 windowStarted lambda 时,会调用 getData() 方法,但显然在 WINDOW_SHOWN 事件发生之前未创建 dataTable。结果,当我尝试调用任何 dataTable 的方法时,我得到 NullPointerException 失败!
我需要捕捉到 dataTable 实际创建的时间,以便我可以使用它的方法。有什么办法吗?
有人请指教...
将您的数据下载代码放在方法 initialize
中,该方法在其根元素已完全处理后或换句话说在分配了所有 FXML 字段后在控制器上调用。
@FXML
public void initialize() {
//Here!
}
我有一个带有 TableView 的 JavaFX 应用程序,我需要在应用程序启动后填充数据。我以下列方式启动应用程序:
private LayoutController theController;
@Override
public void start(Stage primaryStage)
{
try {
FXMLLoader fxmlload = new FXMLLoader(getClass().getResource("Sample.fxml"));
BorderPane root = (BorderPane )fxmlload.load();
Scene scene = new Scene(root,640,480);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
theController = (LayoutController )fxmlload.getController();
primaryStage.setTitle("Title Application");
primaryStage.addEventHandler(WindowEvent.WINDOW_SHOWN,theController.windowStarted);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
在我的名为 SampleController 的控制器中,我有 TableView 对象,以便它(最初)在启动后创建一些列:
@FXML Parent myRoot;
@FXML TableView datTable<DataClass>;
private Stage theStage;
public EventHandler<WindowEvent> windowStarted = event -> {
theStage = (Stage )myRoot.getScene().getWindow();
getData();
};
protected void getData()
{
dataTable.setEditable(false);
.
// Call a SOAP service to get the data
.
}
我曾假设一旦舞台的 WINDOW_SHOWN 事件发生,控件就会被创建,我可以用它们做一些事情。显然不是这样。显然,使用 FXML 指定的控件实际上是在 主应用程序 window 创建之后 创建的!
当执行 windowStarted lambda 时,会调用 getData() 方法,但显然在 WINDOW_SHOWN 事件发生之前未创建 dataTable。结果,当我尝试调用任何 dataTable 的方法时,我得到 NullPointerException 失败!
我需要捕捉到 dataTable 实际创建的时间,以便我可以使用它的方法。有什么办法吗?
有人请指教...
将您的数据下载代码放在方法 initialize
中,该方法在其根元素已完全处理后或换句话说在分配了所有 FXML 字段后在控制器上调用。
@FXML
public void initialize() {
//Here!
}