使用fxml文件和Controller在Java fx中切换场景
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用fxml文件和Controller在Java fx中切换场景相关的知识,希望对你有一定的参考价值。
在这个程序中,我想通过按钮单击在场景之间切换。我想在设置FXML加载器的位置的行上得到一个例外。在其他教程或帖子中,我看到它的完成方式与我做的相同。我还检查了fxml文件的路径一百次。
因此,特殊情况是使用Controller UserTableViewController从QuestionTableViewController和tableViewQuestion.fxml的fxml切换到tableViewUser.fxml。至少我在MyApplication中启动了Programm。
该异常是否会到来,因为我的类是可实现的可初始化?如果是,为什么以及如何解决这个问题?或者也许是因为我对fxml文件有不同的控制器?但为什么以及如何解决这个问题?
所以现在我问你,那个程序在我的愚蠢错误在哪里?
控制器与switchMethod:
public class QuestionTableViewController implements Initializable{
@FXML
TableView<Question> questionTable;
public void changeToUserDatabase() throws IOException {
Scene quizScene = new Scene(FXMLLoader.load(getClass().
getResource("src/view/tableViewUser.fxml")));
Stage primaryStage = (Stage) questionTable.getScene().getWindow();
primaryStage.setScene(quizScene);
primaryStage.show();
}}
开始方法:
public class MyApplication extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("view/tableViewQuestion.fxml"));
primaryStage.setTitle("Database of Century");
primaryStage.setScene(new Scene(root, 750, 500));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
PS:我只是展示我认为需要的方法,当然我有一个带有onMouseClick方法的按钮和我的tableView的内容。如果您认为它们可能相关,请提交,我将在问题中添加它。 :)
问题是您尝试在错误的位置访问资源。基于我在this question中读到的内容,您应该在一个目录中正确访问fxml
文件。试试这个:
Parent root = FXMLLoader.load(getClass().getResource("../view/tableViewQuestion.fxml"));
其中..
应指示查看父目录。
编辑:
以上内容不适用于打包的jar。要轻松解决您的问题,请在views包中创建一个类并使用它来加载资源。
例如,在ViewLoader
中创建类src/view
并加载fxml
文件,如下所示:
Parent root = FXMLLoader.load(ViewLoader.class.getResource("tableViewQuestion.fxml"));
以上是关于使用fxml文件和Controller在Java fx中切换场景的主要内容,如果未能解决你的问题,请参考以下文章
JavaFx:采用SceneBuilder方式实现格式化java源文件(引入fxml文件完成样式布局)
JavaFX: FXML嵌套和子Controller(Sub-Controller)