使用fxml文件和控制器

时间:2018-03-02 10:42:48

标签: java user-interface javafx java-8

在这个程序中,我想通过按钮点击在场景之间切换。我想在设置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的内容。如果您认为它们可能相关,请提交,我将在问题中添加它。 :)

1 个答案:

答案 0 :(得分:2)

问题是您尝试在错误的位置访问资源。根据我在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"));