编程语言
首页 > 编程语言> > JavaFX入门和使用实践

JavaFX入门和使用实践

作者:互联网

文章目录

JavaFX入门和使用实践

一、前言

JavaFX:https://www.oracle.com/cn/java/technologies/javase/javafx-overview.html

OpenJFX:https://openjfx.io/

JavaFX中文资料:http://www.javafxchina.net/blog/docs/tutorial3/

JavaFX Scene Builder Archive:https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html

POI 操作:https://blog.csdn.net/u011424614/article/details/104370924

创建 JavaFX 项目:https://blog.csdn.net/u011424614/article/details/112383294

二、正文

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

1.创建项目

1)创建项目

创建项目:https://blog.csdn.net/u011424614/article/details/112383294

2)移动 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.界面布局

在这里插入图片描述

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

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

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sample.Controller">
   <children>
      <Label layoutX="231.0" layoutY="14.0" text="TXT读取工具">
         <font>
            <Font size="24.0" />
         </font>
      </Label>
      <Label layoutX="37.0" layoutY="77.0" text="请选择文件" />
      <TextField fx:id="tfShowPath" editable="false" layoutX="118.0" layoutY="72.0" prefHeight="30.0" prefWidth="335.0" />
      <Button fx:id="btnOpenFile" layoutX="462.0" layoutY="72.0" mnemonicParsing="false" text="打开文件..." />
      <TextArea fx:id="taShowText" editable="false" layoutX="37.0" layoutY="119.0" prefHeight="258.0" prefWidth="517.0" />
   </children>
</Pane>

3.业务处理

1)绑定控件

2)选择文件

3)读取并显示

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
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.打包项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、其它

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)下载并安装

官网下载:https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html

在这里插入图片描述

2)IDEA 配置

在这里插入图片描述

3)使用

在这里插入图片描述

2.ChoiceBox控件

cbSelectId.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> 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"); // 默认选中项

标签:控件,java,入门,JavaFX,javafx,实践,fxml,new,import
来源: https://blog.csdn.net/u011424614/article/details/113096771