单击菜单项时如何显示JavaFX Web视图?

时间:2018-09-24 18:52:32

标签: java javafx

在我的应用程序中,我希望用户能够单击菜单项并出现一个新窗口。但是,当我运行代码时,它说您可以从菜单项中打开一个新窗口。所以我的问题是,是否有其他解决方法或更简单的方法可以帮助我实现目标。感谢您的帮助。

P.S->我之前发布了一个类似的问题,但是在复制正确的代码时犯了一个错误。这是我得到的正确错误和代码。

代码:

    /**
 * When the Logger menu item is clicked, then it will execute and make a new window
 * @param actionEvent
 * @throws Exception
 */
public void clickedLoggerMenu(ActionEvent actionEvent) throws Exception {
    //The name of the controller
    FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/viewer_logger.fxml"));
    Parent home_page = (Parent) loader.load();

    LoggerController logController = loader.getController();

    //this sets the scene
        Scene home_page_scene = new Scene(home_page, 650, 580);
        Stage app_stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
        app_stage.setScene(home_page_scene);
        app_stage.show();

}

例外:

Caused by: java.lang.ClassCastException: javafx.controls@10.0.1/javafx.scene.control.MenuItem cannot be cast to javafx.graphics@10.0.1/javafx.scene.Node
    at controller.SubmitController.clickedLoggerMenu(SubmitController.java:99)

1 个答案:

答案 0 :(得分:1)

问题出在您如何尝试创建Three

Stage

您正在尝试将Stage app_stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); 强制转换为MenuItem,但这不是它的工作原理。

无论如何,您还需要创建一个新的Node,所以不要尝试获取原始的Stage

Window

然后从此处构建Stage app_stage = new Stage()

侧注::我建议阅读一些优秀的JavaFX教程以学习基础知识。