gpt4 book ai didi

JavaFX : Remove the scene loaded in Center of BorderPane

转载 作者:行者123 更新时间:2023-11-29 05:29:58 25 4
gpt4 key购买 nike

我有一个 JavaFX2.2 应用程序,它在主屏幕上有一个 BorderPane。在顶部 Pane 中,我有两个按钮“按钮 A”和“按钮 B”,分别在 BorderPane 的中心动态加载场景“场景 A”和“场景 B”。

“场景 A”有两个按钮。其中一个在 FXML 文件中定义为“默认按钮”,另一个定义为“取消按钮”。

“场景 B”有一个 TextField 和一个 TableView。

以下是主屏幕中用于在场景之间切换的代码片段。

@FXML
private void handlebtnAAction(ActionEvent event) {
loadCentreScene("fxml/FXSceneA.fxml");
}

@FXML
private void handlebtnBAction(ActionEvent event) {
LoadCentreScene("fxml/FXSceneB.fxml");
}


private void loadCentreScene(String fxmlPath){
try {
FXMLLoader loader = new FXMLLoader(Admin.class.getResource(fxmlPath));
AnchorPane page = (AnchorPane) loader.load();
Plugin fxController = loader.getController();
fxController.setMainController(this);
Node node = getRootLayout().getCenter();
node = null;
getRootLayout().setCenter(page);
} catch (IOException ex) {
Dialogs.showErrorDialog(primaryStage, ex.getMessage(), "Loading Error");
}
}

现在,当我从“场景 A”切换到“场景 B”并在将 TextField 聚焦到“场景 B”后按下“Enter”按钮时,将执行“场景 A”上默认按钮的事件处理程序。

我也尝试了以下变体,但我仍然面临同样的问题。

    private void loadCentreScene(String fxmlPath){
try {
FXMLLoader loader = new FXMLLoader(Admin.class.getResource(fxmlPath));
AnchorPane page = (AnchorPane) loader.load();
Plugin fxController = loader.getController();
fxController.setMainController(this);
Node node = getRootLayout().getCenter();
getRootLayout().getChildren().remove(node); //<****Remove the node from children****>
getRootLayout().setCenter(null); //<****Set center to null****>
node = null;
getRootLayout().setCenter(page);
} catch (IOException ex) {
Dialogs.showErrorDialog(primaryStage, ex.getMessage(), "Loading Error");
}
}

根据我的理解,该对象应该是不可访问的,稍后应该被垃圾收集。任何人都可以帮助我理解为什么仍然可以访问“场景 A”的对象以及为什么为默认按钮调用事件处理程序。

最佳答案

这是一个 known bug :当按钮不是场景的一部分时,它不应接收事件。该错误已在 Java 8 中修复。我整理了一个简单的示例,可以确认 Java 7 中的错误和它已在 Java 8 中修复。您可能想在 Java 8 中运行您的代码,看看它是否有效那里是正确的。

对于 Java 7 解决方法,将代码包装在您的 defaultButton(也可能是取消按钮)的处理程序中

if (button.getScene() != null) {
//...
}

关于JavaFX : Remove the scene loaded in Center of BorderPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com