快速创建基于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音乐播放器/下载器 一个开源(科学)参考管理器,

pytorch实现手语识别

连续手语识别项目,中文数据集CSL

masteryi-0018的博客 1万+

如何搭建pikachu靶场

Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字)

2401_85351702的博客 1276

【RViz2】导入urdf模型时报错:Could not load resource xxx,Unable to open file xxx,Error retrieving file xxx

初学ROS2,想要在RViz2中显示urdf模型。其中.urdf文件引用了外部的meshes文件夹。

qq_43557907的博客 9487

紫光PG2L100H平台DDR3 IP核调试实战:从AXI接口到状态机设计的避坑指南

本文详细介绍了在紫光PG2L100H FPGA平台上调试DDR3 IP核的实战经验,重点解析了AXI接口的特殊行为和状态机设计的关键技巧。通过具体代码示例和调试方法,帮助开发者规避常见陷阱,实现高性能DDR3控制器设计,达到1.2GB/s的稳定带宽。

weixin_28717969的博客 218

Jetson AGX Orin 新手避坑:解决‘找不到nvidia-jetpack包’的完整修复指南

本文详细介绍了Jetson AGX Orin设备在安装JetPack开发套件时遇到的'nvidia-jetpack包缺失'问题的完整解决方案。通过分析问题根源、提供分步修复指南以及系统优化建议,帮助开发者快速解决这一常见问题,充分发挥Jetson AGX Orin的边缘计算性能。

weixin_42520909的博客 460

OpenClaw 核心命令深度解析:/think high、/reasoning on、/verbose on 功能与实战指南

本文深入解析OpenClaw框架的三大核心命令:/think high实现极限深度推理,突破常规思考瓶颈;/reasoning on提供透明化推理过程,增强决策可信度;/verbose on控制详细输出级别。文章从技术架构、实现原理、配置方法和典型场景四个维度,详细阐述了各命令的功能特性与实战应用,包括法律分析、代码调试和商业决策等复杂场景的最佳实践。同时提供了多级配置方案和资源消耗参考,帮助用户根据任务复杂度灵活调配AI资源,实现效率与深度的最优平衡。

qq_43344878的博客 943

YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLO11-pose关键点检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5418

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值