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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM