【问题标题】:How to use JavaFX in Main如何在 Main 中使用 JavaFX
【发布时间】:2021-07-03 05:38:07
【问题描述】:

我完全迷路了。我过去一直在使用 scenebuilder 和 javaFX,但现在我被困了 5 个小时,而且我没有更进一步。让我解释一下:

  • 我有一个使用 maven 依赖项的 java Eclipse 项目
  • Main 是我想使用 JavaFX 或加载 fxml 的地方
  • 该程序需要许多 VCC 文件并提取数据以将它们全部放在一个 excel 中
  • 程序可以运行,但我无法将 FXML 文件加载到主文件中,甚至无法在其中显示窗格

现在我的 Java Main 类必须扩展 Application 吗?我尝试了两种方法 - 确实有效。

一些示例代码:

public void start(Stage primaryStage) {
    try {
        bpmain = new BorderPane(FXMLLoader.load(new File("src\\fxml\\UserInterface.fxml").toURI().toURL()));
        primaryStage.setScene(new Scene(bpmain));
        primaryStage.show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

或者这个(来自原始文档)

public void start(Stage stage) {
    Circle circ = new Circle(40, 40, 30);
    Group root = new Group(circ);
    Scene scene = new Scene(root, 400, 300);

    stage.setTitle("My JavaFX Application");
    stage.setScene(scene);
    stage.show();
}

但是这个启动方法并没有被调用...我应该把它放在哪里?


我的程序看起来应该很简单。我想要一个小的 UI 窗口,让您可以选择 VCC 数据所在的文件夹和一个基本上应该运行 Main 方法的 OK 按钮。

所以一个 TextField,当它在 Main 中选择一个 Path 时,它会被替换(文件路径),只有一个简单的 OK 按钮,上面写着:是的,运行 main - 因为 main 完美运行,只是我无法显示 ui 和我不知道如何真正将它连接到 Main.java

任何帮助表示赞赏 - Ty

【问题讨论】:

  • 您是否在main 中致电javafx.application.launch()?这会引导 fx 应用程序。那么你的应用程序必须扩展Application 并覆盖start() 方法,而不仅仅是重新声明它。
  • 是的,我真的不明白。我可以制作一个使用 start 方法扩展应用程序的 MainFX,然后在我的普通 java main 中我会在哪里调用它?
  • 您的应用扩展了Application。它有一个调用launch()main 方法。它覆盖start()。除了提到的方法之外,不应该有任何其他主要方法。其余的都应该由应用程序触发,无论是通过用户界面交互、在 start 方法中还是在某些可能存在的启动事件中。
  • 好的,我实际上得到了一些显示(来自文档的 UI) - 现在谢谢,如果我有更多问题,我会回来的。谢谢!

标签: java eclipse javafx scenebuilder


【解决方案1】:

选项 1

public class Launch extends Application {

    public static Stage stage = null;

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/fxml/Main.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        this.stage = stage;
        stage.show();
    }

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

}

选项 2:

   public class SidebarController implements Initializable {
    
        @Override
        public void initialize(URL url, ResourceBundle rb) {
    
        }    
        
        @FXML
        void btnHome_OnMouseClicked(MouseEvent event) throws IOException {
      BorderPane borderPane = (BorderPane) ((Node) event.getSource()).getScene().getRoot();
            Parent sidebar = FXMLLoader.load(getClass().getResource("/fxml/ContentArea.fxml"));
            borderPane.setCenter(sidebar);
    
        }
}

【讨论】:

  • 请遵守 java 命名约定
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2012-12-31
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多