我有一个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输入。按钮上的工具提示不显示且无法点击。但是,没有任何例外。
答案 0 :(得分:0)
进一步的实验揭示了这个问题 - 添加到contentPane
的子节点是更大而不是父节点 - 这似乎意味着它拦截了按钮的点击事件现在在它下面。
对于将这些类型的子节点添加到帧中可能有更好的模式,但至少我的当前问题已被解释 - UI根本没有被锁定!