JavaFX应用程序在将子项添加到Pane后停止响应

时间:2014-05-10 23:32:27

标签: java javafx-8

我有一个JavaFX应用程序,它显示Scene只有一个直接子项 - 从AnchorPane加载FXML文件。

@Override
public void start(Stage primaryStage) throws Exception {
    this.primaryStage = primaryStage;
    this.injector = Guice.createInjector(new UiModule(), new CommonModule());

    final EventBus eventBus = injector.getInstance(EventBus.class);
    eventBus.register(this);

    final FXMLLoader loader = injector.getInstance(FXMLLoader.class);
    final Parent root = loader.load(SphinxApp.class
        .getResourceAsStream("/com/atomiccomics/sphinx/ui/survey/SurveyFrame.fxml"));

    final Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}

它有一个带有fx:id的子Pane,我通过@FXML注释在控制器类中引用它,以及一个类似地连接到@FXML方法的按钮。当我单击该按钮时,该方法尝试加载不同的FXML文件,并将窗格的子项替换为新加载的Node。

@FXML
private Pane contentPane;

//Further down...

@FXML
public void next() {
    final FXMLLoader loader = loaderProvider.get();
    try {
        final Node panel = loader.load(SurveyController.class.getResourceAsStream("Instructions.fxml"));
        contentPane.getChildren().clear();
        contentPane.getChildren().add(panel);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

这部分似乎正确发生 - 孩子的FXML内容显示在屏幕上 - 但此时没有进一步的UI输入。按钮上的工具提示不显示且无法点击。但是,没有任何例外。

1 个答案:

答案 0 :(得分:0)

进一步的实验揭示了这个问题 - 添加到contentPane的子节点是更大而不是父节点 - 这似乎意味着它拦截了按钮的点击事件现在在它下面。

对于将这些类型的子节点添加到帧中可能有更好的模式,但至少我的当前问题已被解释 - UI根本没有被锁定!