使用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);
    }
}

Here you can see the structure of my Programm

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)

在Controller类中访问FXML中的按钮(使用场景构建器)[复制]

为锚窗格设置类控制器

JAVAFX添加按钮事件备忘

如何在FXML中显示和访问Java类中的ComboBox?