JavaFx开发桌面软件

*/-->

code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}

JavaFx开发桌面软件

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比较类似,分为三类:

  1. 绝对布局
    在Tk里面,绝对布局是使用place来实现的,在JavaFx中使用 Pane 可以达到类似的效果,就是一旦确定了位置,变换窗口大小时,位置始终保持不变。所有控件通过层次叠加在一起的,在Tk中通过偏移值x和y来定位,在JavaFx中通过layoutX和layoutY来定位。
  2. 相对布局
    在Tk里面,相对布局使用是最多的,就是通过pack命令来管理和布局控件。在JavaFx中则通过 VBoxHBox 来实现pack的效果。HBox相当于,frame中的控件使用pack管理,加上参数-side left。VBox相当于,frame中的控件使用pack管理,加上参数-side top。Tk中pack的-expand选项,用 VBox.setVgrow(node, Priority.ALWAYS)HBox.setHgrow(node, Priority.ALWAYS) 来实现。
  3. 表格布局
    在Tk里面,表格布局是使用grid命令来进行的,在JavaFx中则使用 GridPaneTilePane 来实现。使用GridPane时,表格的大小是自适应的,使用TilePane时,表格大小是相等的。

2.2 JavaFx中的其他窗口容器

JavaFx中的窗口容器要比Tk中多很多,Tk中只有frame和labelframe两种。而JavaFx中的窗口容器则很多:

  1. 和frame比较类似的是 HBoxVBox
  2. BorderPane 比较有意思,它一开始就定义了5个区域,上中下,中间又分为左中右。可以把控件装到这几个位置去,用来创建经典的工具栏,左边展示树,中间操作区,右边显示属性,下面显示消息之类的布局非常方便。
  3. FlowPane 用来创建宽度或者高度可以调整的容器,有横向和纵向两个方向可以选择。用来布置较多的按钮或者图片之类的控件在里面,当调整宽度或者高度时,可以自动的增加或者减少每排或每列的控件数量。比如,原来宽度是500的时候,可以显示5个按钮,当宽度调整到300时,显示3个按钮,另外2个按钮自动换到下一排。
  4. StackPane 用来层叠多个控件,与基础的Pane比较类似,可以层叠,但不是通过x和y来定位,而是通过alignment来定位,可以自适应变化大小。
  5. ScrollPane 带滚动条的容器。
  6. 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());
}
});

Date: 2017-04-11 22:06

Created: 2017-05-25 周四 10:24

Emacs 25.2.1 (Org mode 8.2.10)

Validate

JavaFx开发桌面软件的更多相关文章

  1. 使用JavaFX开发桌面程序(一)

    使用JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献 ...

  2. wpf开发桌面软件记录

    我的开发环境是win7,vs2013,sql2012,用wpf开发了一个很简单的桌面软件,用Installshield制作的安装包,安装包包含了.framework4.5,在自己电脑上测试正常,想着挺 ...

  3. 1.1 Qt Creater使用Python开发桌面软件的操作流程

    Qt Creater及Python的下载与安装过程不再赘述,读者可自行在网上搜索相应的下载与安装方法. 首先我们打开Qt Creater,单击"Create Project"按钮或 ...

  4. 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫

    http://www.oschina.net/p/lomox https://github.com/caidongyun/lomox 用Web技术做桌面客户端.虽然仍然免不了要分发客户端,但好处是,界 ...

  5. JAVAFX开发桌面应用

    javafx中文版文档: http://www.yiibai.com/javafx/ JavaFX之FXController详解 JavaFx系列教程 含打包部署 javafx之两种局部界面的呈现方式 ...

  6. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  7. 利用JavaFx开发RIA桌面应用-在线资料

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/52805751 1.前言 虽说java已经不是主流的桌面应 ...

  8. 利用JavaFx开发RIA桌面应用-事件监听

    1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...

  9. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

随机推荐

  1. sudo在清理内存的时候报错

    运行下面语句清缓存时,报Permission denied错误:-bash: /proc/sys/vm/drop_caches: Permission denied sudo echo 1 > ...

  2. JS高级 —— 普通函数、构造函数、对象方法的调用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. XMPP即时通讯协议使用(四)——Openfire服务器源码编译与添加消息记录保存

    下载Openfire源码 下载地址:https://www.igniterealtime.org/downloads/index.jsp,当前最新版本为:4.2.3 Eclipse上部署Openfir ...

  4. PoisonTap - 在锁屏电脑上窃取cookies,获得电脑路由,安装网络后门的工具

    工具地址:https://samy.pl/poisontap/ 当PoisonTap(由Raspberry Pi Zero & Node.js开发)接入到一个锁屏或者用密码保护的电脑上时,它可 ...

  5. ubuntu16.04的一系列安装

    1.安装ubuntu https://blog.csdn.net/weixin_40494464/article/details/81010256 2.ubuntu里选择简体中文 https://bl ...

  6. ltp-ddt nand_mtd_dd_rw_jffs2

    error: 由于在uboot下没有发现坏块,将核心代码剥离出来调试: flash_eraseall -q -j /dev/mtd1mkdir -p /mnt/partition_nand_1419m ...

  7. Ubunton

    Ubunton 装完机后 root账户进不去 没密码 在自己账号下 sudo passwd 输入两次密码就是root的密码 之后就可以su root 密码进入了 外部客户端sftp方式连接: sudo ...

  8. 【串线篇】Mybatis缓存之二级缓存

    1.应用 二级缓存:namespace级别的缓存:SqlSession关闭或者提交以后有效 一级缓存:SqlSession关闭或者提交以后,一级缓存的数据会放在二级缓存中: 二级缓存的使用:mybat ...

  9. Java中实现线程同步的三种方法

    实现同步的三种方法 多线程共享数据时,会发生线程不安全的情况,多线程共享数据必须同步. 实现同步的三种方法: 使用同步代码块 使用同步方法 使用互斥锁ReetrantLock(更灵活的代码控制) 代码 ...

  10. php max()函数 语法

    php max()函数 语法 作用:从所有参数中找到最大数 语法:max(X,Y,Z) 或者max(array(X,Y,Z)) 参数:max函数中参数至少一个,可以多个参数,也可以是数组. 说明:如果 ...