在我的应用程序中,我希望用户能够单击菜单项并出现一个新窗口。但是,当我运行代码时,它说您可以从菜单项中打开一个新窗口。所以我的问题是,是否有其他解决方法或更简单的方法可以帮助我实现目标。感谢您的帮助。
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)
答案 0 :(得分:1)
问题出在您如何尝试创建Three
:
Stage
您正在尝试将Stage app_stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
强制转换为MenuItem
,但这不是它的工作原理。
无论如何,您还需要创建一个新的Node
,所以不要尝试获取原始的Stage
。
Window
然后从此处构建Stage app_stage = new Stage()
。
侧注::我建议阅读一些优秀的JavaFX教程以学习基础知识。