我有 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();
}
}
我建议您看一下这个 GitHub 存储库之一。
您可以在那里看到它是如何完成的并改变您的路径。
使用 gradle 运行 JavaFX 应用程序示例 https://github.com/davidweber411/JavaFxAppGradleNonModular
使用 Maven 运行 JavaFX 应用程序示例 https://github.com/davidweber411/JavaFxAppMavenNonModular