JavaFX 是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公司的共同努力的成果,目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。
笔者在这里记录一下使用JavaFX写一个网络助手,旨在记录JavaFX的使用。
项目创建
- 在gitee中创建仓库JavaFX-Networ
2021-11-10_134405.png
- 在主机中使用git clone 命令将JavaFX-Networ仓库拉取到工作目录中
2021-11-10_134446.png
- 使用idea创建新的项目,选择Maven项目
2021-11-10_134528.png
- 修改项目名称为上文中拉取的仓库名称,修改项目的工作目录等信息
2021-11-10_134637.png
- 新建项目结构如下图
2021-11-10_134809.png
项目配置
- 在pom文件中添加配置信息,在开发过程中需要用到什么依赖时,在这里自行添加就行
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.venus</groupId>
<artifactId>JavaFX-Network</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>-->
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<!-- 这里是放在 src/main/java-->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.fxml</include>
<include>**/fxml/*.fxml</include>
<!-- 如果想要弄个包名专门放fxml文件,像上一行这样添加设置 -->
<!-- 之后,使用getResource("fxml/xx.fxml")这样子 -->
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
编码
- 分包,在项目的java目录下根据自己开发创建包
2021-11-10_135243.png
- 创建启动类,在你包根路径下创建一个启动类,命令自定义,但是请遵照Java开发的命名规范,笔者这里命令Application,在启动类中创建一个main函数,并执行main函数,确保开发环境的正确性。
2021-11-10_135417.png
- 创建一个界面:在包路径下创建一个form包,下面在创建一个home包(分包每个人习惯不一样,你完全可以根据你编码习惯去做),在home包下创建一个Home.fxml文件和一个Home.java文件。其中fxml文件是界面布局文件,java文件是界面操作类例如处理界面操作事件等。这2个文件现在可以什么都不用改。 现在上文中创建的启动类Application继承Application,注意这里继承的Application不是我们创建的启动类,而是javafx.application.Application这个类。继承Application后需要重写一个start()函数,在start函数中有一个舞台对象,通过这个对象显示我们的界面,具体的操作就是JavaFX的内容。在这里就是创建一个场景设置场景的标题、尺寸信息,然后将场景显示在舞台中。
package org.venus;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
* Author Jxx _让世界看到我
* On 2021/11/10
* Note TODO
*/
public class Application extends javafx.application.Application {
public static void main(String[] args) {
System.out.println("项目的启动类");
launch(args);
}
private double width = 800;
private double height = 0.618 * width;
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("org/venus/form/home/Home.fxml"));
primaryStage.setTitle("Java网络调试助手");
primaryStage.setScene(new Scene(root, width, height));
primaryStage.show();
}
}
- 运行桌面运行程序:至上一步内容再次执行启动类的main函数,可以启动一个桌面程序的界面,里面会什么都没有,因为场景中的布局是上文中我们创建的一个新布局,里面还什么都没有写。
2021-11-10_142040.png
主界面
- 在上文中创建的home界面文件中可以写界面布局了,这种写布局里面的控件和标签的类型很多,需要使用哪一个可以自行查阅资料。笔者这里使用一个tab,切换不同的场景,然后各自场景有自己的界面。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<TabPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.venus.form.home.Home">
<tabs>
<Tab text="TCP客户端">
</Tab>
<Tab text="TCP服务端">
</Tab>
<Tab text="UDP">
</Tab>
</tabs>
</TabPane>
2021-11-10_142923.png
TCP服务端
- 在form包下创建tcp_server包,在tcp_server包下创建TCPServer类和界面文件