JavaFx开发桌面软件
JavaFx开发桌面软件
*/-->
code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}
JavaFx开发桌面软件
Table of Contents
1 Awt, Swing, SWT 和 JavaFx
Java中进行界面GUI开发,总共有四种方式。
- Awt
Awt是最早开发的界面库,为了满足跨平台的需要,达到“一次编写多处运行”的效果。在不同的系统下,使用系统的控件包装成统一的调用接口。但由于每个系统下面的控件不同,甚至,很多是缺失的。所以,效果并不太好。现在基本上没有人使用了。 - Swing
为了解决Awt在不同系统下控件不一样的问题,开发了一套独立运行在Java虚拟机上的控件,这就是Swing。由于它完全独立于操作系统,所以,可以在各个系统下运行,并且基本一致。但是,由于是虚拟出来的控件,因此运行效率上稍微差一些,比较慢。另外,默认的界面比较丑,但是,有Look And Feel,类似css这种,可以通过配置修改显示效果。精通之后,可以做很多的效果出来,但是入门比较困难,开发效率也不高。 - SWT
IBM为了开发Eclipse,开发出来的一套界面库,它基于Awt和Swing之间,效率等各方面,相当于各取了其中的一部分。已经不推荐使用了。 - JavaFx
JavaFx是Java中的最新的界面库,Oracle开发的。有两种编写模式,一种是纯代码编写,一种是代码+FXML。纯代码好理解,代码+FXML是什么呢?如果熟悉html编程的话,就比较好理解了,相当于html+js来编写界面。当然,这两种方法都可以配合css来编写。
http://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm
Awt | Swing | SWT | JavaFx | |
---|---|---|---|---|
优势 | 1. 运行速度快 | 1. 多平台 | 1. 介于Awt和Swing之间 | 1. 支持控件多 |
2. 稳定 | 2. 默认控件漂亮 | |||
3. 编写接口简洁 | ||||
4. 开发效率高 | ||||
劣势 | 1. 夸平台效果不好 | 1. 运行效率低 | 1. 介于Awt和Swing之间 | 1. 运行效率一般 |
2. 开发效率低 | 2. 开发效率不高 | |||
3. 接口繁琐 | ||||
4. 默认主题界面不美观 | ||||
5. 精通耗时长 |
2 JavaFx纯代码编写界面
2.1 JavaFx中的布局方式
总的布局方式和Tk比较类似,分为三类:
- 绝对布局
在Tk里面,绝对布局是使用place来实现的,在JavaFx中使用Pane
可以达到类似的效果,就是一旦确定了位置,变换窗口大小时,位置始终保持不变。所有控件通过层次叠加在一起的,在Tk中通过偏移值x和y来定位,在JavaFx中通过layoutX和layoutY来定位。 - 相对布局
在Tk里面,相对布局使用是最多的,就是通过pack命令来管理和布局控件。在JavaFx中则通过VBox
和HBox
来实现pack的效果。HBox相当于,frame中的控件使用pack管理,加上参数-side left。VBox相当于,frame中的控件使用pack管理,加上参数-side top。Tk中pack的-expand选项,用VBox.setVgrow(node, Priority.ALWAYS)
和HBox.setHgrow(node, Priority.ALWAYS)
来实现。 - 表格布局
在Tk里面,表格布局是使用grid命令来进行的,在JavaFx中则使用GridPane
和TilePane
来实现。使用GridPane时,表格的大小是自适应的,使用TilePane时,表格大小是相等的。
2.2 JavaFx中的其他窗口容器
JavaFx中的窗口容器要比Tk中多很多,Tk中只有frame和labelframe两种。而JavaFx中的窗口容器则很多:
- 和frame比较类似的是
HBox
和VBox
。 BorderPane
比较有意思,它一开始就定义了5个区域,上中下,中间又分为左中右。可以把控件装到这几个位置去,用来创建经典的工具栏,左边展示树,中间操作区,右边显示属性,下面显示消息之类的布局非常方便。FlowPane
用来创建宽度或者高度可以调整的容器,有横向和纵向两个方向可以选择。用来布置较多的按钮或者图片之类的控件在里面,当调整宽度或者高度时,可以自动的增加或者减少每排或每列的控件数量。比如,原来宽度是500的时候,可以显示5个按钮,当宽度调整到300时,显示3个按钮,另外2个按钮自动换到下一排。StackPane
用来层叠多个控件,与基础的Pane比较类似,可以层叠,但不是通过x和y来定位,而是通过alignment来定位,可以自适应变化大小。ScrollPane
带滚动条的容器。AnchorPane
通过anchor的方向,left、right、top、bottom和center等方向来对控件进行布局。
2.3 JavaFx中的控件
2.4 自适应窗口的创建
3 JavaFx中的事件
3.1 OnShown
当我们在创建时需要获取控件的宽度和高度时,这时,由于控件并没有show,所以,它们的宽度和高度都是0。那么,我们怎么才能获取到正确的宽度和高度呢?
- 调用show()函数,把窗口显示出来,但,这时程序的控件还在创建,会看到一个没有完成的界面,不太好。
- 使用OnShown事件,就是当show()函数执行完之后,再执行callback里面的代码。
primaryStage.setOnShown(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent e) {
rect.setWidth(hbox.getWidth());
}
});
JavaFx开发桌面软件的更多相关文章
- 使用JavaFX开发桌面程序(一)
使用JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献 ...
- wpf开发桌面软件记录
我的开发环境是win7,vs2013,sql2012,用wpf开发了一个很简单的桌面软件,用Installshield制作的安装包,安装包包含了.framework4.5,在自己电脑上测试正常,想着挺 ...
- 1.1 Qt Creater使用Python开发桌面软件的操作流程
Qt Creater及Python的下载与安装过程不再赘述,读者可自行在网上搜索相应的下载与安装方法. 首先我们打开Qt Creater,单击"Create Project"按钮或 ...
- 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫
http://www.oschina.net/p/lomox https://github.com/caidongyun/lomox 用Web技术做桌面客户端.虽然仍然免不了要分发客户端,但好处是,界 ...
- JAVAFX开发桌面应用
javafx中文版文档: http://www.yiibai.com/javafx/ JavaFX之FXController详解 JavaFx系列教程 含打包部署 javafx之两种局部界面的呈现方式 ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- 利用JavaFx开发RIA桌面应用-在线资料
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/52805751 1.前言 虽说java已经不是主流的桌面应 ...
- 利用JavaFx开发RIA桌面应用-事件监听
1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...
- 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子
本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...
随机推荐
- 自己实现一个类似 jQuery 的函数库
假如我们有一个需求,需要给元素添加样式类,使用原生的JS很容易搞定. 1 抽取函数 function addClass(node, className){ node.classList.add(cla ...
- Oracle安装client客户端报错Environment variable: "PATH"
安装时出行这个错误 Environment variable: "PATH" 解决方法 1.找到你的安装包里的这个路径下的这两个文件 2.用文本方式打开 将里两个文件面所有的102 ...
- Backend事后诸葛亮
事后诸葛亮 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件想解决初学编程语言的入门困难.定义的不算太清楚,没有仔细地调查用户入门的困难之处. ...
- linux学习-系统监控工具
系统监控工具 come from:https://blog.csdn.net/free050463/article/details/82842273top.free.vmstat.iostat.pma ...
- Nginx学习总结:常用module(二)
斜体下划线,表示建议采用默认配置,无需显式的配置 一.ngx_core_module 1.accept_mutex [on | off] 上下文:events 默认为“on”,在wor ...
- 脚本_根据 md5 校验码,检测文件是否被修改
#!bin/bash#功能:根据 md5 校验码,检测文件是否被修改#作者:liusingbon#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文 ...
- mongodb 索引分类
一. 普通索引篇 1.创建索引 创建索引:db.person.ensureIndex({"age":1}).这里我们使用了ensureIndex在age上建立了索引.“1”:表示按 ...
- 苹果推出了AI手机,打造一款高度个性化的设备
在今年苹果的WWDC 2018上,一些人认为今年会因为软件专注而缺乏新的MacBook和iPad而感到无聊,该公司宣布,iOS12的推出可能是迄今为止最重要的操作系统更新.一系列Siri增强功能,Ap ...
- C#高级编程笔记(22至25章节)文件\注册表\权限\事务
22安全(using System.Security.Principal;) AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.Wi ...
- 英语单词deprecated
deprecated 来源——fdisk /dev/sdb [root@centos65 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is depr ...