当前位置 主页 > 服务器问题 > Linux/apache问题 > 最大化 缩小
基于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(); }