zoukankan      html  css  js  c++  java
  • JavaFx开发桌面软件

    JavaFx开发桌面软件

    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

  • 相关阅读:
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
    RocketMQ-Console安装及RocketMQ命令行管理工具介绍
    RocketMQ之一:RocketMQ整体介绍
    Prometheus 监控之 zookeeper
    详解MySQL数据类型
    Linux2:Linux目录结构
    再谈AbstractQueuedSynchronizer3:基于AbstractQueuedSynchronizer的并发类实现
    再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现
    Java虚拟机15:再谈四种引用状态
    再谈AbstractQueuedSynchronizer1:独占模式
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/6831486.html
Copyright © 2011-2022 走看看