快速创建基于JavaFX的桌面App

JavaFx之整合JFoenix(十四) JavaFx之整合JFoenix JFoenix是JavaFx流行的UI框架之一 github:https://github.com/sshahine/JFoenix 整合Maven <!--https://github.com/sshahine/JFoenix--> <dependency> <groupId>com.jfoenix</groupId> <artifactId>jfoenix</artifactId> 阅读详情

快速创建基于JavaFX的桌面App

快速创建一个基于JavaFX的桌面APP,用于模拟一个简单的客户端POST请求;
项目基于Maven创建,使用的IDE是Intellij IDEA,项目编码全部为UTF-8;
JDK版本为1.8。

制作目标

简单说明一下想制作的APP的样子:
实现一个APP,存在两个视图:首页和编辑页。首页简单的展示一些欢迎话语,编辑页负责填写POST请求的数据,并且有一个按钮提交请求。
顶部有菜单,部分菜单只在编辑视图中有效,两个视图间的切换带有动画效果。
下面,开始实现这个简单的APP。

一、创建项目

  1. 创建新目录,选择Maven项目,原型选择maven-archetype-quickstart;
  2. 添加项目依赖,说明如下:
1. 由于个人偏好使用RxJava,而且JavaFx的设计也包含对RxJava的使用,javafx有一个配套的框架,所以会引用rxjavafx框架;
2. 要实现的顶部菜单不在视图范围内,需要实现一个类似EventBus的功能,由顶部菜单向下传播点击操作的事件,因此会引入rxjava2中的部分功能;
3. controlsfx中提供了很多使用的自定义控件;
4. 控件样式直接使用基于Material Design的jfoenix;
5. datafx可以帮助我快速的管理各个视图和菜单的切换关系;
6. json解析库使用fasterxml.jackson,http请求使用apache的httpcomponents,也会使用到其他的commons库;
7. zenjava可以帮助快速打包项目为执行的APP;
8. 使用log4j记录执行日志。

项目依赖添加后部分内容如下:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <fasterxml.jackson.version>2.8.8</fasterxml.jackson.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.controlsfx</groupId>
    <artifactId>controlsfx</artifactId>
    <version>8.40.12</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${fasterxml.jackson.version}</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${fasterxml.jackson.version}</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${fasterxml.jackson.version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
  </dependency>
  <dependency>
    <groupId>io.reactivex.rxjava2</groupId>
    <artifactId>rxjava</artifactId>
    <version>2.0.6</version>
  </dependency>
  <dependency>
    <groupId>io.reactivex</groupId>
    <artifactId>rxjavafx</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>com.jfoenix</groupId>
    <artifactId>jfoenix</artifactId>
    <version>1.4.0</version>
  </dependency>
  <dependency>
    <groupId>io.datafx</groupId>
    <artifactId>flow</artifactId>
    <version>8.0.1</version>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>utf-8</encoding>
      </configuration>
    </plugin>
    <plugin>
      <groupId>com.zenjava</groupId>
      <artifactId>javafx-maven-plugin</artifactId>
      <version>8.5.0</version>
      <configuration>
        <vendor>snart</vendor>
        <mainClass>demo.App</mainClass>
      </configuration>
    </plugin>
  </plugins>
</build>

maven直接创建的项目没有resources目录,因此需要在project setting中添加resources目录。

二、创建视图

javafx项目的入口只需要实现javafx.application.Application类即可

public class App extends Application {
   
   
    @Override
    public void start(Stage primaryStage) throws Exception {
        // TODO
    }
}

使用datafx管理视图的切换(datafx说明见: https://github.com/guigarage/DataFX ),首先需要在start方法中初始化一个ViewFlowContext来管理视图以及视图间共享的数据模型

ViewFlowContext flowContext = new ViewFlowContext();

Javafx用Stage(舞台)来做根基,用Scene(场景)来控制每个场景,每个场景可以定义要展示的内容,这里需要先将primaryStage注入到ViewFlowContext中,初始化一个视图流Flow,然后初始化一个Scene,每个Scene的初始化都需要一个root控件,这里我们使用jfoenix中的JFXDecorator(jfoenix说明见: https://github.com/jfoenixadmin/JFoenix )

flowContext.register("Stage", primaryStage);

// create flow and flow container, flow container controls view decoration and view exchange
Flow flow = new Flow(MainController.class);
DefaultFlowContainer container = new DefaultFlowContainer();
flow.createHandler(flowContext).start(container);

// JFXDecorator will be applied to primaryStage, and decorated on view which is created by flow container
JFXDecorator decorator = new JFXDecorator(primaryStage, container.getView(),
    false, true, true);

// init scene with a decorator
Scene scene = new Scene(decorator, 750, 500);
primaryStage.setMinWidth(500);
primaryStage.setMinHeight(400);
primaryStage.setTitle("Demo");
primaryStage.setScene(scene);
primaryStage.show();

Flow的初始化需要一个默认的视图以及视图控制器:

import io.datafx.controller.ViewController;

@ViewController(value = "/views/main.fxml")
public class MainController {
}

注解@ViewController用于定义此控制器指定的视图位置,main.fxml定义在resource/views下:

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

<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<BorderPane xmlns="http://javafx.com/javafx/8.0.112"
            xmlns:fx="http://javafx.com/fxml/1">
  <top>
    <
JFoenix中文教程:4、JFXComboBox下拉框组件 JFoenix提供的下拉组件为JFXComboBox,JFXComboBox样式如下: 对应源码如下: <JFXComboBox layoutX="50" layoutY="40" fx:id="jfxComboBox" prefWidth="200" promptText="请选择"> <items> <FXCollections fx:factory="observableArrayList"> <Lab 阅读详情

相关推荐

JavaFX+Jfoenix 学习笔记(序)--引言And软件截图

文章目录(更新中): JavaFX+Jfoenix 学习笔记(序)--引言And软件截图 JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello Word演示 JavaFX+Jfoenix 学习笔记(二)--Stage和Scene JavaFX+Jfoenix 学习笔记(三)--TableView数据表格 JavaFX+Jfoenix 学习笔记(四)--MenuBar菜...

足信方为的博客 1万+

JavaFx基础学习【一】:基本认识

JavaFX 是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。它是许多个人和公司的共同努力的成果,目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。

Staba的博客 2265

JavaFX基础:1: 简介

Sun早在2007年就推出了JavaFX,作为客户端体验增强的一项特性,在被Oracle收购之后似乎变得可有可无,用户的反馈也一直不温不火。这篇文章中,我们来介绍一下JavaFX的基础特性以及一个简单的例子在IDEA中运行。

知行合一 止于至善 1万+

JavaFX实战:5分钟搞定一个带图标的桌面应用(Java 8环境)

本文提供了一份JavaFX快速入门指南,教你如何在Java 8环境下,仅用5分钟创建一个带图标和基础交互的桌面应用。文章从环境准备、窗口构建、控件布局到样式美化,一步步演示了核心开发流程,并强调了Java 8内置JavaFX带来的便捷性,适合需要快速构建轻量级桌面工具的开发者。

weixin_29000991的博客 249

如何在 IntelliJ IDEA 中创建 Java 桌面应用程序

本文旨在为Java开发者提供在IntelliJ IDEA中创建桌面应用程序的全面指南。内容涵盖从零开始的项目创建到最终产品打包的全过程,包括两种主流GUI框架(Swing和JavaFX)的选择与实现。文章将从环境准备开始,逐步讲解项目创建、界面设计、业务逻辑实现、调试测试和最终打包发布的全流程。每个步骤都将配有详细的说明和截图。Swing: Java传统的GUI工具包,提供丰富的组件库JavaFX: Java新一代GUI框架,支持现代化UI设计和丰富的多媒体功能JAR。

AI开发架构师 1748

重塑桌面应用开发的未来:探索Java FX的强大与魅力

JavaFX是一个用于创建和交付丰富客户端应用程序的软件平台,最初由Sun Microsystems(现已被Oracle收购)开发。它基于Java编程语言,提供了强大的图形用户界面(GUI)组件库、媒体播放器、Web浏览器集成等功能。更重要的是,JavaFX完全兼容现有的Java生态系统,使得开发者可以轻松地将旧项目迁移到新的平台上。

墨夶的博客 2018

JacpFX-DataFX

JacpFX / DataFX 流插件 这个插件允许你在 JacpFX 中集成 DataFX 流。 您可以将 JacpFX 上下文(@Resource 私有上下文上下文)注入到任何 DataFX 流控制器并访问您的 JacpFX 应用程序的其余部分。 用法 DataFXFlowWrapper 类扩展了 DataFX Flow.class,您必须提供一个组件的有效 JacpFX 组件 ID,该组件的上下文应该可以注入到 DataFX 流控制器中。 您可以在 ComponentLeft 组件中包含的“SimpleDataFX_JacpFX”项目中找到一个示例。

JFoenix:JavaFX材料设计库

JFoenix是一个开放源代码Java库,它使用Java组件实现Google Material Design JFoenix for Java 9- (9.xx) JFoenix for Java 8- (8.xx) 适用于Android的JFoenix- 可从获得已发布的版本 已经在使用JFoenix吗? 随意创建一个请求请求,以在JFoenix github中为您的项目添加链接。 还有一件事,所有贡献都受到赞赏。 不要犹豫,向JFoenix添加您自己的贡献:) 如果您喜欢JFoenix :)并希望支持该项目,则可以成为或的支持者。 使用JFoenix的项目 你好我的世界! 发射器 通过在几个项目:, , 通过在: , 多汁学习应用程序 对等软件 音频插件管理器 编程 币价值监控器 一个执行您想要的事情的实用平台 Java手势识别的简单框架 具有RMI技术的车辆预订系统 计算机辅助教学程序 其他小项目 ,, 一个数字游戏收藏管理应用程序 跨平台API请求构建器 活动预订应用程序 广告,开源,YouTube音乐播放器/下载器 一个开源(科学)参考管理器,

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1580

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 755

SerDes硬件设计原理介绍

接收端:外部差分串行数据------线性均衡器----(CDR从数据中恢复出采样时钟)-----解串器(串行信号转并行信号)-------8B/10B的解码器或解扰器-----FIFO-----FPGA接受差分并行数据。发送端: FPGA发送差分并行数据----FIFO------8B/10B编码器或者扰码器-----串行器(并行信号转串行信号)-----均衡器(滤波)--------TX串行信号差分外发。串行器:8bit的并行数据----2bit的并行数据----1bits的串行数据。

weixin_42304393的博客 1108

simulink求解器选择的小tip

给出了simulink选择求解器的一种tip,与积分初值有关。

高能阿博特的博客 2054

【知识分享】高速印刷电路板(PCB)寄生参数计算指南

对于高速PCB设计而言,寄生参数一直是令人讨厌的问题,它们会悄悄潜入PCB并在电路中造成严重的破坏,具体来说,它们是渗透到高速电路中的隐藏杂散电容器和电感器,包括由封装引线和长走线形成的电感器、PCB焊盘对金属平面形成的电容器、走线之间形成的电容器等等。

一只豌豆象的博客 1780

【信号与系统】Multisim 仿真信号合成与分解

软件 Multisim 进行方波信号的产生、分解和合成,观察信号波形的分解与合成,加深对信号频谱的理解。

AXYZdong的博客 2万+

点云去噪:基于点云拟合的方法

点云处理是计算机视觉中的重要任务之一,而点云去噪是点云处理的关键步骤之一。在实际应用中,由于采集设备的噪声、运动估计误差或者环境干扰等因素,点云数据中常常包含有噪声点,这些噪声点会对后续的点云分析和处理造成不良影响。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。该方法通过拟合点云数据的曲面模型,对噪声点进行识别和过滤,从而得到更加干净的点云数据。

AuSwift的博客 638

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: QQ群无法上传文件,离线传送文件都可以的解决办法
下一篇: 基于Django快速构建Web项目
Macarron
博客等级 码龄12年 8粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值