1、官网
JavaFX中文官方网站、Oracle官方文档
2、教程
JavaFX中文基础教程视频合集
JavaFX实战教程
3、VSCode/Eclipse
VSCode(写HelloWorld用)、VSCode的Java扩展
Eclipse,跳至第9段
4、Liberica JDK安装
Liberica JDK官网下载
依次选择,All versions,Java 17 (LTS),Release Version选一个最新的,Windows,x86,64 bit,Full JDK
(必须是Full JDK这个版本的,因为这个版本才自带JavaFX)
点击下载MSI格式
5、手打HelloWorld代码
新建一个文件夹Hello,在文件夹内新建文件Hello.java,内容如下
(既然是HelloWorld,用记事本或者VSCode打开文件夹就行了)
public class Hello {
public static void main(String[] args) {
System.out.printf("hello world");
}
}
6、运行HelloWorld
javac .\Hello.java;java Hello
7、修改代码,加入javafx
Hello
继承javafx.application.Application
所以先导入,然后extends Application
import javafx.application.Application; public class Hello extends Application{ public static void main(String[] args) { System.out.printf("hello world"); } }
- 此时VSCode会将Hello类标红,并提示你需要写一个start方法
- 点击
快速修复…(Ctrl+,)
,点击Add unimplemented methods
,自动生成start
函数,自动导入javafx.stage.Stage
(手写也不是不行其实)
- 删除这两行
改为// TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'start'");
primaryStage.show();
- 用不着抛异常,所以删除字符串
throws Exception
- 调用 javafx 中的 launch(启动 JavaFX 应用程序的入口点)
改为public static void main(String[] args) { System.out.printf("hello world"); }
public static void main(String[] args) { launch(args); }
- 快捷键
Shift+Alt+F
格式化代码,最终代码
8、运行
javac .\Hello.java;java Hello
运行效果,显示一个什么也没有的窗口
9、下载IDEA
访问IDEA官网下载地址下载 IntelliJ IDEA 的 Community Edition 版本
勾选用户协议点击Continue
,数据分享点击Dont't Send
10、设置IDEA
左侧栏,Customize,All settings…
代码提示快捷键:Keymap,MainMenu,Code,Code Completion
右键Cyclic Expand Word
,Remove Alt+/
右键Basic
,Remove Ctrl+空格
右键Basic
,Add Keyboard Shortcut
,按下Alt+/
,点击OK
点击Apply
UTF-8编码:Editor,File Encodings
Global Encoding
和Project Encoding
都选择UTF-8
,点击Apply
自动导入:Editor,General,Auto Import
勾选Add unambiguous imports on the fly
和Optimize imports on the fly
,点击Apply
大小写模糊匹配:Editor,General,Code Completion
取消Match case
(没人会记得代码叫Length/length/Size/size/len/Len/getlen/strlen,还匹配大小写呢,给自己的人生增加难度,生怕找到这个方法是吧)
点击Apply
关闭自动更新:Appearance & Behavior,System Settings,Updates
取消勾选Check IDE updates for
、Check for plugin updates
,点击Apply
打开超多文件时不隐藏:Editor,General,Editor Tabs
取消勾选Show tabs in one row
,点击Apply
显示方法分割线:Editor,General,Appearance
勾选Show method separators
,点击Apply
自动缩进注释位置:Editor,Code Style,Java,Arrangement右边,Code Generation(将窗口全屏,设置被折叠了)
取消勾选Line comment at first column
,点击Apply
自动缩进注释位置HTML:HTML中的Code Generation
取消勾选Line comment at first column
和Block comment at first column
,点击Apply
自动编译:Build, Execution, Deployment,Compiler
勾选Build project automatically
,点击Apply
10、新建项目
点击New Project
Name
输入hijavafx
点击Create
等待加载
等待右下角更新索引
如果出现下载预建索引提示,点击Always download
即可
11、运行项目
右上角,点击绿色三角形图标(Shift+F10),运行,底部控制台将显示运行结果
(i到5的循环是IDEA自带的)
12、格式化代码IDEA
Ctrl+Alt+L
格式化代码
13、添加javafx代码
public class Main
改为
public class Main extends Application
IDEA将自动添加import
语句
IDEA将public class Main extends Application
标红并提示需要写一个start方法
点击Implement methods(Alt+Shift+Enter)
,保持默认实现设置,点击OK
自动添加
删除prinf语句和for循环,删除字符串throws Exception
,删除自动生成的注释
main函数中添加launch(args);
start函数中添加primaryStage.show();
最终代码如下
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.show();
}
}
运行,成功显示空白窗口
14、添加窗口标题
在start中使用setTitle方法添加窗口标题
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
primaryStage.show();
}
15、添加窗口图标
15.1 准备图片
准备一张图片
15.2 在IDEA中导入图片
右键文件夹src
,New,Directory,命名为resources
右键resources
,New,Directory,命名为images
复制图片文件,选中images
,Ctrl+V粘贴,图片文件命名为icon.png
,点击OK
15.3 复制图片路径
右键resources
下的images
下的icon.png
,Copy Path/Reference…
,选择Path From Content Root
15.4 编写代码
在start中使用getIcons方法添加窗口图标
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();
primaryStage.getIcons().add(new Image(IconUrl));
primaryStage.show();
}
16、设置窗口尺寸
在start中使用setWidth方法和setHeight方法设置窗口尺寸
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();
primaryStage.getIcons().add(new Image(IconUrl));
primaryStage.setWidth(400);
primaryStage.setHeight(300);
primaryStage.show();
}
17、禁止修改窗口尺寸
在start中使用setResizable方法向其传入false,禁止修改窗口尺寸
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();
primaryStage.getIcons().add(new Image(IconUrl));
primaryStage.setWidth(800);
primaryStage.setHeight(300);
primaryStage.setResizable(false);
primaryStage.show();
}
18、加载一张背景图片
18.1 准备图片
18.2 在IDEA中导入图片
复制图片文件,选中images
,Ctrl+V粘贴,图片文件命名为background.png
,点击OK
18.3 写代码
primaryStage里加载一个Scene,Scene里加载一个Pane,使用Pane的setBackground方法设置背景图片
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();
primaryStage.getIcons().add(new Image(IconUrl));
primaryStage.setWidth(800);
primaryStage.setHeight(300);
primaryStage.setResizable(false);
Pane root = new Pane();
String BackgroundImageUrl = this.getClass().getResource("/resources/images/background.png").toString();
BackgroundImage backgroundImage = new BackgroundImage(
new Image(BackgroundImageUrl),
null,
null,
null,
new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, true, true)
);
root.setBackground(new Background(backgroundImage));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
19、显示文字
添加两个label,显示文字
@Override
public void start(Stage primaryStage) {
// 省略
root.setBackground(new Background(backgroundImage));
Label label = new Label("JavaFX");
label.setStyle("-fx-font-size: 45px; -fx-text-fill: black;");
label.setLayoutX(315);
label.setLayoutY(26);
root.getChildren().add(label);
Label label2 = new Label(" JavaFX是一个开源的下一代客户端应用平台,适用于基于\n" +
"Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公\n" +
"司的共同努力的成果,目的是为开发丰富的客户端应用提供\n" +
"一个现代、高效、功能齐全的工具包。");
label2.setStyle("-fx-font-size: 27px; -fx-text-fill: black;");
label2.setLayoutX(28);
label2.setLayoutY(101);
root.getChildren().add(label2);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
20、换一张无字背景图
导入这张图,命名为background2.png
String BackgroundImageUrl = this.getClass().getResource("/resources/images/background.png").toString();
改为
String BackgroundImageUrl = this.getClass().getResource("/resources/images/background2.png").toString();
21、最终效果
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.io.File;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("hiJavaFX");
String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();
primaryStage.getIcons().add(new Image(IconUrl));
primaryStage.setWidth(800);
primaryStage.setHeight(300);
primaryStage.setResizable(false);
Pane root = new Pane();
String BackgroundImageUrl = this.getClass().getResource("/resources/images/background2.png").toString();
BackgroundImage backgroundImage = new BackgroundImage(
new Image(BackgroundImageUrl),
null,
null,
null,
new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO,
false, false, true, true)
);
root.setBackground(new Background(backgroundImage));
Label label = new Label("JavaFX");
label.setStyle("-fx-font-size: 45px; -fx-text-fill: black;");
label.setLayoutX(315);
label.setLayoutY(26);
root.getChildren().add(label);
Label label2 = new Label(" JavaFX是一个开源的下一代客户端应用平台,适用于基于\n" +
"Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公\n" +
"司的共同努力的成果,目的是为开发丰富的客户端应用提供\n" +
"一个现代、高效、功能齐全的工具包。");
label2.setStyle("-fx-font-size: 27px; -fx-text-fill: black;");
label2.setLayoutX(28);
label2.setLayoutY(101);
root.getChildren().add(label2);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
}
22、打包jar
(打包之前清理一下图片,使用了background2.png但是没用background.png,那么就可以删除background.png再打包)
IDEA,菜单栏,File,ProjectStructure…(Ctrl+Alt+Shift+S),Artifacts
(右侧如果有内容则点击-
清空)
点击+
,JAR > From modules with dependencies…,
选择Main Class,(其他网上教程说要修改META-INF的目录,可是IDEA已经改好了,就是以src结尾的,不用改了)
点击OK
,点击OK
你以为下一步是点击+
,添加图片目录?错,直接点击OK
菜单栏,Build,Build Artifact,Build
打包位置:IdeaProjects\hijavafx\out\artifacts\hijavafx_jar\hijavafx.jar
打包后和打包前效果一致,图片显示正常(jar文件大小56KB,bankground2.png30多KB,icon.png20多KB,正好对应上)
23、打包EXE(exe4j)(自带jre)
23.1 告知exe可执行文件,去固定位置找jre
模仿第24步,重点在exe4j的第6步,配置JRE的步骤
Minimum version和Maximum version都输入17
展开高级选项,点击Search sequence
清空自带的设置项(你总不能指望别人安装的jre恰好还自带javafx吧)
点击绿色加号,类型设置为Directory,Directory手动输入.\jre
,点击确定
点击下一步
Choose the preferred VM使用默认设置,点击下一步
其余操作继续参考第23步生成exe文件
23.2 只是告知exe去固定位置找jre是没用的,你得真的给他一个jre
参考步骤4下载一份JRE
此时Package Type选择Full JRE,用不着Full JDK
下载ZIP格式的
解压后的文件夹改名为jre
,并放置到exe4jfolder
文件夹
路径举例:exe4jfolder\hijavafx.exe
路径举例:exe4jfolder\jre\bin\client\jvm.dll
清理exe4jfolder
文件夹,只保留hijavafx.exe
和解压的jre
文件夹
双击exe可以运行
(嫌jre文件夹太大的可以自行精简jre)
24、打包EXE(exe4j)(需要jre)
24.0 注册exe4j
去搜索引擎搜索exe4j的密钥\注册码,此处省略
24.1 新建文件夹
新建文件夹,命名为exe4jfolder
,用于放置打包exe的所需文件
24.2 复制jar包
将IdeaProjects\hijavafx\out\artifacts\hijavafx_jar\hijavafx.jar
复制一份放置到exe4jfolder
文件夹
24.2 准备一个ico图标
下载greenfish,用项目中的icon.png
生成一个icon.ico
放置到exe4jfolder
文件夹
24.3 下载安装exe4j
exe4j下载地址
24.4 使用exe4j将jar打包成exe
打开exe4j,点击下一步
跳过欢迎界面,每完成一步都点击下一步
按钮(exe4j只认下一步按钮,老老实实按就行了)
2. Proect type
:"JAR in EXE" mode
3. Application info
:
Short name of your application:hijavafx
Output directory:选择exe4jfolder
文件夹
4. Executable info
:
Executable type:已经选择了GUI application
,所以不用动
Executable name:hijavafx
勾选Icon File,并选择exe4jfolder
文件夹中的icon.ico
文件
5. Java invocation
:
点击绿色加号,Archive选项选择exe4jfolder
文件夹中的hijavafx.jar
文件
Main class from Class path:选择Main,确定
6. JRE
:
Minimum version:17
Maximum version:17
7. Splash screen
:点击下一步
按钮跳过
8. Message
:点击下一步
到第9步时,软件将运行,并提示exe4j has finished
点击Exit
退出软件
生成位置:exe4jfolder\hijavafx.exe
24.5 运行
运行时会提示该软件由exe4j生成,这是因为这个软件是付费软件
在新电脑上会找不到JRE。
???还得装JRE你打的什么包?会装jre我用你说???
25、打包EXE(launch4j)(自带jre)
访问保存在sourceforge上的launch4j,下载launch4j
新建文件夹launch4jfolder
,里面放hijavafx.jar,icon.ico和一份Liberica的jre
设置截图中的Output file
、Jar
和Icon
三项
删除默认值
改为./jre
,并填写搜索版本(这软件死脑筋,一个填17.0.7,另一个必须得17.0.6或者其他小一号的版本)
点击齿轮图标保存一个xml格式的配置文件到launch4jfolder
文件夹后自动生成exe
生成完毕
运行报错(说明确实是找到了jre位置了),点确定当没看见就行了,软件成功运行
29、(放弃)下载Eclipse安装器
2023‑03
版本
- 南京大学镜像站下载
eclipse-inst-jre-win64.exe
- 清华大学镜像站下载
eclipse-inst-jre-win64.exe
- 中国科学技术大学镜像站下载
eclipse-java-2023-03-R-win32-x86_64.zip
(这个是Eclipse本体) - 访问Eclipse官网,直接点击下载
- 访问历史版本下载其他版本,例如
2020-12
版本
30、(放弃)运行Eclipse安装器,安装Eclipse
打开eclipseinstaller by Oomph
点击第一项Eclipse IDE for Java Developers
自动生成JDK路径和安装目录设置,可以不用改动
直接点击INSTALL
安装
将会弹出用户协议,点击Accept Now
安装完毕后关闭eclipseinstaller by Oomph
31、(放弃)配置Eclipse
开始菜单找到并打开Eclipse IDE for Java Developers - 2023-03
Workspace
可以设置为其他目录,点击Launch
31.1 设置中文
访问语言包下载地址
菜单栏,Help,Install New Software…
点击Add
南京大学镜像:https://mirrors.nju.edu.cn/eclipse/technology/babel/update-site/latest/
清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/eclipse/technology/babel/update-site/latest/
中国科学技术大学镜像:https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/latest/
选择一个链接填到Location
里
点击Add
,Pending等待加载
列表向下滑找到并勾选Babel Language Packs in Chinese (Simplified)
取消勾选Contact all update sites during install to find required software
点击Next >
,点击Next >
勾选I accept the terms of the license agreement
点击Finish
等待安装
弹出Trust界面,点击Select All
,然后点击Trust Selected
安装完成后点击Restart Now
,Eclipse将重启
31.2 设置UTF-8
Eclipse,菜单栏,窗口(W),首选项(P),常规,工作空间,文本文件编码(T),其他(O):,设置为UTF-8
31.3 自动提示
Eclipse,菜单栏,窗口(W),首选项(P),Java,编辑器,内容辅助,自动激活
Java的自动激活触发器(J),设置为.qwertyuiopasdfghjklzxcvbnm
点击应用并关闭
按钮
31.4 添加JRE
Eclipse,菜单栏,窗口(W),首选项(P),Java,已安装的 JRE,
移出缺省值,就算是LibericaJDK
,那也得删除
点击添加(A)…
,点击下一步(N) >
点击目录(O)…
,
32、(放弃)Eclipse
32.0、新建项目
Eclipse,菜单栏,文件(F),新建(N)(Alt+Shift+N),Java 项目
项目名(P),输入hijavafx1
勾选Use default JRE 'LibericaJDK-17-Full' and workspace compiler preferences
直接点击完成(F)
32.1、新建包
左侧,包资源管理器,右键hijavafx1
,新建(W),包
名称(M),改为pers.siqiao.hijavafx.lifecycle
点击完成(F)
32.2、新建类
右键pers.siqiao.hijavafx.lifecycle
,新建(W),类
名称(M),输入Main
勾选public static void main(String[] args)
想要创建哪些方法存根(占位代码)?
点击完成(F)
32.3、main方法
main方法内,输入sysout
的一部分syso
,快捷键Alt+/
显示模板建议
回车选择sysout - 打印到标准输出
输出这句话System.out.println("hijavafx");
32.4 运行
上方,工具栏,第7项,点击绿色圆底白色三角形图标运行
菜单栏,运行(R),运行(R)(Ctrl+F11)
下方控制台显示输出
32.5 代码格式化
菜单栏,源码(S),格式化(F)(Ctrl+Shift+F)
32.6 继承
public class Main
改为
public class Main extends Application
Eclipse自动添加import
语句
Application
居然被标红,说明Eclipse表面上import
,其实根本不认识javafx.application.Application
Eclipse 真绝了,越活越回旋,你快都不如 VSCode 了你都
Application cannot be resolved to a type
The type javafx.application.Application is not accessible