本文共 8084 字,大约阅读时间需要 26 分钟。
JavaFX:
OpenJFX:
JavaFX中文资料:
JavaFX Scene Builder Archive:
POI 操作:
创建 JavaFX 项目:
场景说明: 读取并显示 txt 文件的内容,最后打包项目为 exe 程序
1)创建项目
创建项目:
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); }}
sample.fxml
,点击编辑区域左下角的 Scene Builder
选项卡如果出现提示:Failed to open the file in the Scene Builder.
解决方法查看当前文章的
三、其它
-1.Scene Builder kit使用
</children></Pane>
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
%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; } }}
File
- Project Structure...
- Artifacts
选项卡 - +
加号 - JavaFx Application
- From module '项目名称'
Put into Output Root
Application class
: 必填,用于打包后,作为启动入口)Native bundle
: 选择 all
;表示 jar 和 exe 都打包,默认只打包 jar 包Apply
应用设置Build
- Build Artifacts...
out
文件夹,jar 包(需要 jre 环境)和 exe 都可以双击打开说明: 这里有 两种方法 ,请自行选择
方法一: 使用 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)使用
Open In SceneBuilder
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/