面向控制台编程?Java的GUI开发

记得之前刚开始学习Java,按部就班去阅读《Java核心技术》这本书的时候,总是听别人提起,java swing那一章不用看了。然后直到对着控制台编程了半年,回来捡起了Swing图形界面,跟着网上搞了坦克大战的游戏,总觉得外观有些过时,并且与现代化的用户界面相比可能缺乏吸引力。随着 JavaFX 的兴起和发展,一些Java开发人员开始转向使用 JavaFX 来构建 GUI 应用程序。JavaFX提供了现代化的 GUI 开发体验、灵活的界面布局和样式定义、跨平台性以及与其他 Java 技术的良好集成,这也是我后来又去学习JavaFX的原因。

什么是JavaFX

JavaFX 是 Java 编程语言的一个跨平台图形用户界面(GUI)框架,用于创建丰富、交互式和现代化的用户界面应用程序。它提供了丰富的功能和工具,使开发人员能够构建具有吸引力和高度可定制的用户界面。JavaFX 提供了一种现代化的方法来设计和开发 GUI 应用程序,支持诸如动画、多媒体、3D 渲染等现代 GUI 元素,同时保持了 Java 平台的跨平台性。

JavaFX的优势:

  1. 现代化的 GUI 开发:JavaFX 提供了丰富的功能,使得开发人员可以创建具有现代化外观和交互体验的用户界面。它支持动画、过渡效果、多媒体和3D 渲染等特性,使得应用程序能够提供更加吸引人的用户体验。

  2. 跨平台性:JavaFX 应用程序可以在多个平台上运行,包括 Windows、Mac 和 Linux。这意味着开发人员可以编写一次代码,并在多个平台上部署应用程序,减少了开发和维护的成本。

  3. CSS 样式:JavaFX 支持使用 CSS 来定义 GUI 元素的样式和外观,使得界面的设计更加灵活。开发人员可以使用 CSS 对界面进行样式化和主题化,从而实现更好的视觉效果。

  4. FXML 布局:JavaFX 提供了 FXML,一种用于声明式地描述界面布局的 XML 格式。使用 FXML 可以将界面的布局与业务逻辑分离,使得代码更易于维护和理解。

  5. 集成性:JavaFX 是 Java 标准库的一部分,与其他 Java 技术(如 Java EE、Spring 等)集成得非常好。这意味着开发人员可以方便地在 JavaFX 应用程序中使用 Java 的强大功能和第三方库。

  6. 未来发展潜力:尽管 JavaFX 相对较新,但它正在迅速发展,并且由于其现代化的特性和跨平台的能力,被广泛认为是 Java GUI 开发的未来趋势之一。

如何准备学习JavaFX

网上的教程和学习指南很容易找到,我就不在这里班门弄斧。这里仅仅讲一下JDK8之后如何在IDEA中运行Javafx。

其实在IDEA中,创建项目时会有一个选项,通过该选项会直接创建一个hello world的demo,可以直接运行。
在这里插入图片描述

但是我这里仅仅向大家介绍如何从一个空项目中构建JavaFX的程序。

新建空项目

这里随便取个名字。
在这里插入图片描述

贴上代码

简单点,直接在src下面新建一个class。 就叫Main.java。贴上代码。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;public class Main extends Application {@Overridepublic void start(Stage primaryStage) {// 创建一个标签Label helloLabel = new Label("Hello World!");// 创建一个堆栈面板并将标签添加到其中StackPane root = new StackPane();root.getChildren().add(helloLabel);// 创建一个场景并将堆栈面板添加到场景中Scene scene = new Scene(root, 300, 200);// 设置舞台(窗口)的标题和场景primaryStage.setTitle("Hello World Example");primaryStage.setScene(scene);// 显示舞台(窗口)primaryStage.show();}public static void main(String[] args) {// 启动 JavaFX 应用程序launch(args);}
}

修复

不出意外,应该是一片红,因为我们需要手动的引入JavaFx相关的包。
到这里下载 https://openjfx.io/

我的路径是

在这里插入图片描述

引入相关包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

之后确定导入,红色消失让我们再次运行。

修改JVM配置

不出意外地出了意外,错误原因
在这里插入图片描述

有了问题咱们就解决,打开

在这里插入图片描述
在这里插入图片描述

编辑虚拟机参数

--module-path=你的javafx包的路径\lib
--add-modules=javafx.base,javafx.controls,javafx.fxml,javafx.graphics

在这里插入图片描述

ok,运行
在这里插入图片描述

大功告成

总结

自此可以快乐地写UI了,再也不是面向黑漆漆的console编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2870273.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

ECMAscript6学习

ECMAscript6介绍 ECMA是一个浏览器脚本标准制定的公司,Netscape 创造了 JavaScript 由于商标原因, 后面ECMA公司取名ECMAscript 1 发布,JavaScript 也就是 ECMAscript.到现在最新的版本是6,简称es6. 新增let 与const let 与const …

Unity在UGUI上通过绘制网格顶点自由画线

该插件的实现是使用UI组件的绘图API来动态生成和修改几何形状,可自由动态更改画线的粗细、拐角圆滑度、颜色,自由增减节点,不额外增加gameobject,并且在原生的UGUI上以ScreenSpace-Overlay的状态下,显示效果如下所示 …

每日一题:LeetCode2.两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了,那么一直重新生成食物,直到生成不冲突…

说说JVM的垃圾回收机制

简介 垃圾回收机制英文为Garbage Collection, 所以我们常常称之为GC。那么为什么我们需要垃圾回收机制呢?如果大家有了解过Java虚拟机运行时区域的组成(JVM运行时存在,本地方法栈,虚拟机方法栈,程序计数器,堆&#xf…

麒麟系统Redis7.2哨兵集群部署

redis哨兵集群部署 1、原理 Redis 哨兵模式是指在 Redis 集群中,有一组专门的进程(即哨兵进程)负责监控主节点和从节点的状态,并在发现故障时自动进行故障转移,以保证 Redis 集群的高可用性。 Redis 提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵进程会周期性地向主…

60 个深度学习教程:包含论文、实现和注释 | 开源日报 No.202

labmlai/annotated_deep_learning_paper_implementations Stars: 44.0k License: MIT annotated_deep_learning_paper_implementations 是一个包含深度学习论文的 60 个实现/教程,附带并排注释;包括 transformers(原始、xl、switch、feedbac…

Sentaurus TCAD中SDE的mtt命令

Reflection 配套代码 ; Building mesh (sde:build-mesh "snmesh" "" "nnode_half_msh") ; Reflect the device (system:command "tdx -mtt -x -M 0 -S 0 -ren drainsource nnode_half_msh nnode_msh");----------------------------…

【洛谷 P8661】[蓝桥杯 2018 省 B] 日志统计 题解(滑动窗口+优先队列+双端队列+集合)

[蓝桥杯 2018 省 B] 日志统计 题目描述 小明维护着一个程序员论坛。现在他收集了一份“点赞”日志,日志共有 N N N 行。其中每一行的格式是 ts id,表示在 t s ts ts 时刻编号 i d id id 的帖子收到一个“赞”。 现在小明想统计有哪些帖子曾经是“热…

电脑充电器能充手机吗?如何给手机充电?

电脑充电器可以给手机充电吗? 电脑充电器可以给手机充电,但前提是电脑充电器的功率输出与手机的功率匹配且接口匹配。 假设电脑充电器的输出功率为5V/2A,手机也支持5V/2A的输入功率。 只要接口匹配,就可以使用电脑充电器给手机充…

20240314-2-字符串string

1.最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀…

玩转键盘鼠标,自动化你的电脑操作 —— 定时执行专家

简介 “定时执行专家”是一款功能强大的定时任务执行软件,除了支持常见的定时关机、重启、执行程序等功能外,还拥有模拟键盘按键和模拟鼠标操作功能,可以让你轻松实现各种自动化操作。 模拟键盘按键功能可以模拟用户的键盘输入,让…

如何用Selenium通过Xpath,精准定位到“多个相同属性值以及多个相同元素”中的目标属性值

前言 本文是该专栏的第21篇,后面会持续分享python爬虫干货知识,记得关注。 相信很多同学,都有使用selenium来写爬虫项目或者自动化页面操作项目。同样,也相信很多同学在使用selenium来定位目标元素的时候,或多或少遇见到这样的情况,就是用Xpath定位目标元素的时候,页面…

第五章、数据库6分

数据库的三级模式和两级映像图 数据模型的三要素:数据结构、数据操作、数据的完整性约束条件 数据库的三级模式和两级映像图 关系代数 函数依赖 平凡函数依赖: 规范化理论 1NF:每个属性都是不可再分的原子 2NF:不存在部分函…

MediaCodec源码分析 状态简单介绍

前言 本文分析MediaCodec.h层的状态机,下篇介绍ACodec状态机,基于7.0代码。 MediaCodec状态介绍 During its life a codec conceptually exists in one of three states: Stopped, Executing or Released. The Stopped collective state is actually the conglomeration of…

我是继续学习编程,还是学数控?

今日话题,继续学习编程,还是学数控?综合来说肯定是软件的待遇和工作环境都要好些。 当然这行有一定的技术门槛,所谓会者不难,难者不会。要入门需要一定的天赋或者说时间,当然 兴趣是最好的老师,…

快慢指针:妙解查找链表的中间结点问题

给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。示…

基于Linux内核的socket编程(TCP)的C语言示例

原文地址&#xff1a;https://www.geeksforgeeks.org/socket-programming-cc/ 服务端&#xff1a; #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <unistd.h>#…

论文阅读——GeoChat(cvpr2024)

GeoChat : Grounded Large Vision-Language Model for Remote Sensing 一、引言 GeoChat&#xff0c;将多模态指令调整扩展到遥感领域以训练多任务会话助理。 遥感领域缺乏多模式指令调整对话数据集。受到最近指令调优工作的启发&#xff0c;GeoChat 使用 Vicuna-v1.5和自动化…

填坑记4:恢复浏览器Console控制台中被隐藏的报错信息,使其正常显示

收录于《填坑记》 一、问题 系统开发时&#xff0c;打开控制台&#xff0c;然后看到红色的报错信息&#xff0c;顿时改Bug的ptsd涌上脑海&#xff0c;想把它们暂时隐藏掉&#xff0c;于是点了右键隐藏。 隐藏之后&#xff0c;界面清净格外舒畅&#xff0c;报错信息不再显示但要…