当前位置 主页 > 服务器问题 > Linux/apache问题 >

    如何基于JavaFX开发桌面程序

    栏目:Linux/apache问题 时间:2019-11-12 10:21

    基于JavaFX开发桌面程序

    注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了。这里就尽量做一点微小的贡献吧

    使用环境

    注:写这个只是为了说明我的环境,使用和我的不一样的环境在理解这篇教程的时候并没有什么问题,例如使用Windows平台、使用Oracle JDK(这样就不需要再单独安装FX组件了,可以不用MAVEN)、使用Oracle的SceneBuilder。可能唯一一个比较影响体验的就是不使用IDEA而是使用eclipse了

    Ubuntu18.04LTS OpenJDK 1.8 IDEA(with MAVEN):使用MAVEN安装FX环境(OpenJDK不附带FX环境) SceneBuilder(glounhq):这是一个fxml可视化设计环境,使用上不如C#,但起码比纯命令设计强一百倍

    搭建JAVA FX环境

    下载IDEA、OpenJDK1.8、SceneBuilder(glounhq).

    SceneBuilder下载地址:https://gluonhq.com/products/scene-builder/#download

    在IDEA中关联SceneBuilder.关联的目的是为了之后可以从IDEA快速打开SceneBuilder来设计页面

    IDEA->File->Settings->Language->Java FX->输入SceneBuilder的路径

    如果是Linux环境,你会发现这个路径还不好找,我是使用locate SceneBuilder命令找到的,路径是: /opt/SceneBuilder/SceneBuilder

    因为OpenJDK没有FX环境,需要我们自己安装。为了便于管理,我们在这里使用MAVEN

    在IDEA中创建一个Java FX项目

    在项目名上右键,选择'Add framework support',选择MAVEN

    在pom.xml文件中加入以下依赖:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
        <dependency>
          <groupId>org.openjfx</groupId>
          <artifactId>javafx-controls</artifactId>
          <version>13</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
        <dependency>
          <groupId>org.openjfx</groupId>
          <artifactId>javafx-fxml</artifactId>
          <version>13</version>
        </dependency>
      </dependencies>

    设计流程

    这里只写一些我已经探索出来的设计流程,如果有不对的请指出~

    先在Resources中创建fxml文件(之所以放在Resources文件夹下,是为了加载的时候方便,之后能看到),创建完成后在文件名上右击,选择'Open in SceneBuilder',之后就可以在SceneBuilder中进行可视化设计了。设计时要注意,对有响应的元素要在code栏下的fx:id中设置id,以便于之后的调用。设计完成后Ctrl+s保存文件

    设计第一个加载的界面。这个可以放在入口的java类的main方法下,举个例子:

    package sample;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
      @Override
      public void start(Stage primaryStage) throws Exception{
    
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Entry.fxml"));//从Resources中获取资源
        primaryStage.setTitle("Course Registration System");
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
      }