我尝试从 IntelliJ 中的包文件夹加载 fxml 文件,但仍然不起作用

问题描述 投票:0回答:1

我有 fxml 文件的包文件夹和 java 文件的视图文件夹。当我将文件放入资源文件夹中时,我可以打开它们,但我无法通过 scenebuilder 将它们与我的控制器链接,但另一方面,当我将其放在资源文件夹中时与名为 view 的 java 文件相同的文件夹,它不会启动,但允许我通过 scenebuilder 链接控制器。

这是代码: //主要调用ViewHandler

package view;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

import java.io.IOException;

public class ViewHandler extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        try
        {
            Parent root = FXMLLoader.load(getClass().getResource("/MainMenu.fxml"));
            FXMLLoader fxmlLoader = new FXMLLoader(ViewHandler.class.getResource("MainMenu.fxml"));

            Scene scene = new Scene(root, Color.BLACK);

            //getting the logo in the left upper corner
            Image icon = new Image("logo.png");//logo has to be in module resources
            stage.getIcons().add(icon);

            //setting the title of the page/ parameters of the window
            stage.setTitle("Main Menu");
            //stage.setFullScreen(true);

            stage.setScene(scene);
            stage.show();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

//控制器

package view;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloController {
    private Stage stage;
    private Scene scene;
    private Parent root;
    private Button cancelButton;
    private AnchorPane scenePane;
    public void switchToMainMenu(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/MainMenu.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToSelectProjectType(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/SelectProjectType.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToEditCommercial(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/EditCommercial1.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToEditIndustrial(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/EditIndustrial1.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToEditResidential(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/EditResidential1.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToEditRoadConstruction(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/EditroadConstruction1.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToViewEdit(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/ViewEdit.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToCreateCommercial(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/createCommercial.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToCreateIndustrial(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/CreateIndustrial.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToCreateResidential(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/CreateResidential.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void switchToCreateRoadConstruction(ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("/CreateRoadConstruction.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public void logout(ActionEvent event)
    {
        stage = (Stage) scenePane.getScene().getWindow();
        stage.close();
    }
}

Error with location of my files

java javafx scenebuilder
1个回答
0
投票

我建议您看一下这个 GitHub 存储库之一。

您可以在那里看到它是如何完成的并改变您的路径。

使用 gradle 运行 JavaFX 应用程序示例 https://github.com/davidweber411/JavaFxAppGradleNonModular

使用 Maven 运行 JavaFX 应用程序示例 https://github.com/davidweber411/JavaFxAppMavenNonModular

© www.soinside.com 2019 - 2024. All rights reserved.