java - 如何在 JavaFX 8 中捕获 TableView 创建

标签 java javafx javafx-8 fxml

我有一个带有 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();
    }
}

在我的 Controller (称为 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 指定的控件实际上是在创建主应用程序窗口之后的某个时间创建的!

发生的情况是,当执行 windowStarted lambda 时,会调用 getData() 方法,但显然在 WINDOW_SHOWN 事件发生之前尚未创建 dataTable。因此,当我尝试调用任何 dataTable 的方法时,我会遇到 NullPointerException 失败!

我需要捕获 dataTable 实际创建的时间,以便我可以使用它的方法。有什么办法可以做到这一点吗?

请大家指教...

最佳答案

将用于数据下载的代码放入方法 initialize 中,该方法在根元素完全处理后(即分配所有 FXML 字段后)在 Controller 上调用。

@FXML
public void initialize() {
    //Here!
}

关于java - 如何在 JavaFX 8 中捕获 TableView 创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260009/

相关文章:

java - 在 Tomcat 7 上部署 JSP Web 应用程序(通过带有 GIT 的 OpenShift)

来自 ControlFX 的 JavaFX PopOver

java - 如何从 SVG 图像在 JavaFX 中创建路径?

JavaFx无法获取相对于场景的节点坐标

java - 将值从 JFrame 传递到 JPanel

java - 带有 Android 的 Azure 移动服务

java - 在 FragmentPagerAdapter 中设置图标和标题

javafx - TreeView - 在展开之前拦截branchExpandedEvent

JavaFX SimpleObjectProperty<T> 与 SimpleTProperty

java - 如何删除 StackPane 大小的额外中断?