博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaFX入门和使用实践
阅读量:4298 次
发布时间:2019-05-27

本文共 8084 字,大约阅读时间需要 26 分钟。

文章目录

JavaFX入门和使用实践

一、前言

  • 操作系统:Windows 10 专业版
  • JDK 版本:1.8
  • 开发工具:IntelliJ IDEA 2020.2.2

JavaFX:

OpenJFX:

JavaFX中文资料:

JavaFX Scene Builder Archive:

POI 操作:

创建 JavaFX 项目:

二、正文

场景说明: 读取并显示 txt 文件的内容,最后打包项目为 exe 程序

1.创建项目

1)创建项目

  • 使用 IntelliJ IDEA 开发工具创建 JavaFX 项目,并添加 maven 构建工具的支持;这步可以参考之前的文章

创建项目:

2)移动 fxml 文件

  • sample.fxml 移动到 resources 文件夹中,修改 Main.java 的 fxml 文件引用路径
package com.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().getResource("/sample.fxml")); primaryStage.setTitle("TXT读取工具 V1.0"); primaryStage.setScene(new Scene(root, 580, 400)); primaryStage.setResizable(false); // 禁止缩放窗口 primaryStage.show(); } public static void main(String[] args) {
launch(args); }}

2.界面布局

  • 打开 sample.fxml ,点击编辑区域左下角的 Scene Builder 选项卡

在这里插入图片描述

如果出现提示:Failed to open the file in the Scene Builder.

解决方法查看当前文章的 三、其它 - 1.Scene Builder kit使用

  • 左侧选择控件,拖拽到显示区域;先选择容器 Pane,然后选择其它控件

在这里插入图片描述

  • 控件:Label、TextField(属性:Editable 去勾)、Button、TextArea(属性:Editable 去勾)
</children></Pane>

3.业务处理

1)绑定控件

  • sample.fxml 文件的 Pane 容器指定 Controller.java

  • sample.fxml 文件的控件设置ID fx:id="controlsId"

  • Controller.java 实现 Initializable

  • Controller.java 定义与 fxml 中 id 名称相同的属性,并添加注解 @FXML

2)选择文件

3)读取并显示

  • 注意: 代码中控件的引用是 javafx.scene.control ;而不是 java.awt
  • 添加日志依赖:
ch.qos.logback
logback-classic
1.2.3
org.slf4j
slf4j-api
1.7.30
  • 新增 logback 配置文件:resource / logback.xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n
${LOG_HOME}/jeecgboot-%d{yyyy-MM-dd}.%i.log
30
20MB
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n
ERROR
%p%d%msg%M%F{32}%L
${LOG_HOME}/error-log.html
${LOG_HOME}/jeecgboot-%d{yyyy-MM-dd}.%i.html
30
10MB
%p%d%msg%M%F{32}%L
  • Controller.java 代码
package com.sample;import javafx.fxml.FXML;import javafx.fxml.Initializable;import javafx.scene.Node;import javafx.scene.control.Button;import javafx.scene.control.TextArea;import javafx.scene.control.TextField;import javafx.stage.FileChooser;import javafx.stage.Window;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.URL;import java.util.ResourceBundle;public class Controller implements Initializable {
@FXML private TextField tfShowPath; // 显示文件路径 @FXML private Button btnOpenFile; // 打开文件按钮 @FXML private TextArea taShowText; // 显示内容 // 日志 private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void initialize(URL location, ResourceBundle resources) {
// 打开文件按钮-事件绑定 handleBtnOpenFile(location, resources); } /** * 打开文件按钮-事件绑定 * @param location * @param resources * */ private void handleBtnOpenFile(URL location, ResourceBundle resources) {
// 按钮绑定事件 btnOpenFile.setOnAction(e -> {
// 文件选择控件 FileChooser fileChooser = new FileChooser(); // 过滤文件格式 /*FileChooser.ExtensionFilter xlsFileChooser = new FileChooser.ExtensionFilter("Excel files (*.xls)","*.xls"); FileChooser.ExtensionFilter xlsxFileChooser = new FileChooser.ExtensionFilter("Excel files (*.xlsx)","*.xlsx");*/ FileChooser.ExtensionFilter txtFileChooser = new FileChooser.ExtensionFilter("TXT files (*.txt)","*.txt"); fileChooser.getExtensionFilters().addAll(txtFileChooser); // 打开选择窗口 Window window = ((Node)e.getSource()).getScene().getWindow(); File chooseFile = fileChooser.showOpenDialog(window); if(chooseFile != null){
// System.out.println(chooseFile.getAbsolutePath()); // 设置路径到显示控件 tfShowPath.setText(chooseFile.getAbsolutePath()); // 读取数据 String result = readFile(chooseFile.getAbsolutePath()); // 显示内容 taShowText.setText(result); } }); } /** * 根据文件路径,读取内容 * @param filepath 文件路径 * */ public String readFile(String filepath){
File file = null; FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; try {
file = new File(filepath); if(file.isFile() && file.exists()){
// 读取内容 fileInputStream = new FileInputStream(file); inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); bufferedReader = new BufferedReader(inputStreamReader); StringBuffer stringBuffer = new StringBuffer(); String lineText = ""; while ((lineText = bufferedReader.readLine()) != null){
stringBuffer.append(lineText).append("\n"); } logger.info(stringBuffer.toString()); return stringBuffer.toString(); }else {
String msg = "文件路径无效."; logger.info(msg); return msg; } } catch (IOException e) {
// e.printStackTrace(); String msg = "读取数据错误:"+e.getMessage(); logger.error(msg); return msg; } }}

4.打包项目

  • 工具栏 File - Project Structure... - Artifacts 选项卡 - + 加号 - JavaFx Application - From module '项目名称'

在这里插入图片描述

  • 选择需要打包的 maven 依赖包 :Output Layout 选项卡 - Available Elements 窗口 - 项目名称右击 - Put into Output Root

在这里插入图片描述

  • Java Fx 选项卡 配置项目信息
    1. Application class : 必填,用于打包后,作为启动入口)
    2. Native bundle : 选择 all ;表示 jar 和 exe 都打包,默认只打包 jar 包

在这里插入图片描述

  • Apply 应用设置
  • 工具栏 Build - Build Artifacts...

在这里插入图片描述

  • 打包后目录:项目根目录 out 文件夹,jar 包(需要 jre 环境)和 exe 都可以双击打开

三、其它

1.Scene Builder Kit使用

说明: 这里有 两种方法 ,请自行选择

方法一: 使用 idea 的 Scene Builder Kit

1) 根据 Idea 提示,获取 scenebuilderkit-11.0.5.jar 的下载路径,使用科学上网的方式,下载 jar 包

提示提取的路径:https://cache-redirector.jetbrains.com/jetbrains.bintray.com/intellij-third-party-dependencies/org/jetbrains/intellij/deps/scenebuilderkit/11.0.5/scenebuilderkit-11.0.5.jar

2) 将下载的 scenebuilderkit-11.0.5.jar 拷贝到 idea 安装目录的 lib 文件夹下

3) 打开 fxml 文件,编辑窗口左下角,切换到 Scene Builder 选项卡,点击 Download JavaFx ,等待其它 jar 包下载完成

在这里插入图片描述

方法二: 使用 Oracle 官网的 Scene Builder Kit

1)下载并安装

官网下载:

在这里插入图片描述

  • 下载并安装 javafx_scenebuilder-2_0-windows.msi

2)IDEA 配置

  • 工具栏 File - Settings...

    (1)Plugins 菜单:查询 JavaFX ;确保以安装和启用

    (2) Languages & Frameworks 菜单:点击 JavaFX ,选择 SBK exe 文件

在这里插入图片描述

3)使用

  • fxml 文件右击 - Open In SceneBuilder

在这里插入图片描述

2.ChoiceBox控件

  • 选择触发事件
cbSelectId.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener
() {
@Override public void changed(ObservableValue
observable, Number oldValue, Number newValue) {
// System.out.println(newValue+" newValue="+cbLngLatField.getItems().get(newValue.intValue())); cbLngLatFieldIndex = newValue.intValue(); } });
  • 设置默认值(需要先设置数据项,才能设置数据项中的值)
cbSelectId.getItems().removeAll(cbSelectId.getItems()); // 先清空之前的数据项cbSelectId.getItems().addAll(datas); // 添加到下拉框中cbSelectId.setValue("abc"); // 默认选中项

转载地址:http://tznws.baihongyu.com/

你可能感兴趣的文章
海思模型bin模型的使用步骤和注意点
查看>>
问题来了
查看>>
德国车牌识别
查看>>
减少特征,OTUS二值化处理后效果
查看>>
德国车牌识别结果,,
查看>>
Dland_2_test-修改后--------------------------------特征点440 + 16个
查看>>
Dland_1_test-修改后--------------粗外围+粗网格------------------特征点440 + 40+ 16个
查看>>
Dland_2_test-修改后-------13特征+粗外围+粗网格特征------------------特征点440 + 16+56个
查看>>
通过Apache反向代理实现微信服务器80端口访问
查看>>
使用python-aiohttp搭建微信公众平台
查看>>
使用python-aiohttp爬取网易云音乐
查看>>
使用python-aiohttp爬取今日头条
查看>>
从github下载WDK项目的坑
查看>>
.gitignore设置跟踪忽略文件夹中文件
查看>>
《CUDA并行程序设计-GPU编程指南》读书笔记--(1)线程网格、线程块以及线程
查看>>
《CUDA并行程序设计-GPU编程指南》读书笔记--(2)CUDA内存处理
查看>>
C++类的内存分配
查看>>
CCSv4新建C6455工程
查看>>
VC调用Matlab生成的dll
查看>>
VC调用Matlab生成的c
查看>>