Java言語でデスクトップアプリを開発するとき、GUI開発フレームワークの選択肢は以下の3つがあった。
- AWT(Abstract Windowing Toolkit)
- Swing
- JavaFX
どちらを選ぶべきか迷っていたので、Java GUIの歴史を調べ、選択するための情報をまとめてみた。
GUIの歴史
年 | GUIの出来事 |
---|---|
1996 | JDK1.0リリース。AWTは標準APIの一部として含まれる。 |
1996 | Netscape社はIFC(Internet Foundation Classes)と呼ばれるGUIライブラリを開発。 |
1997 | Sun Microsystems社とNetscape社は、IFCと他の技術を組み合わせ、Java Foundation Classesを形成する意向を発表した。コードネームはSwing。 |
1998 | JDK1.2リリース。Swingは標準APIの一部として含まれる。 |
2007 | JavaOneでJavaFXが公表された。Adobe Flex、Microsoft Silverlightに続いて3番目のRIAプラットフォームとなる。 |
2008 | JavaFX1リリース。静的型付けされた宣言的言語であるJavaFX Scriptを用いて開発する。 |
2011 | JavaFX2リリース。Javaコードで書けることになり、JavaFX ScriptはOracle社により廃止。 |
2014 | JavaFX8がJDK8に含まれ、バージョン番号もそろえる。 |
2018 | JavaFX11はJDK11に含まれず、OpenJFXを利用することになる。 |
GUIの選択
GUIを選択するために、それぞれの特徴を確認した。
AWT
AWTは、GUI要素の生成と動作を各ターゲットプラットフォーム(Windows、Linux、Macintoshなど)のネイティブGUIツールキットに委ねる。出来上がったプログラムは、理論上はどのプラットフォームでも、ターゲットプラットフォームの「look-and-feel」で動作させることができる。
しかし、GUI要素はプラットフォームによって動作が微妙に異なることがある。そのため、このアプローチでは、ユーザーに一貫した予測可能な体験を提供することは困難だった。さらに残念なことに、AWTのライブラリには、プラットフォームによって異なるバグが存在していた。これは、「write once, debug everywhere」と揶揄されるものとなった。
Swing
SwingはAWTの完全な代替品ではなく、AWTのアーキテクチャの上に構築されている。
Swingは、より高性能なUIコンポーネントを提供するだけです。Swingのプログラムを書くときは、AWTの基礎、特にイベントハンドリングを使用する。
SwingはUIのすべてのピクセルを描画するため、リリースされた当初はユーザーから「遅い」というクレームがあった。
JavaFX
JavaFXは、FXML(Oracle社が作成したXMLベースのユーザインタフェースマークアップ言語)を使用してGUIの画面のデザインを記述する。動作などの論理的な処理(Javaクラス)と画面デザイン(FXML)を分離することによって、分散開発ができるようになる。
また、FXMLの定義には専用のGUIツールがあるので、画面を感覚的に作成できる。
選択
上記から、AWTはほぼ選択肢から外れることになり、SwingかJavaFXかの二択一になる。
SwingはJDK標準搭載でJava言語で完結できるが、画面デザインの面ではJavaFXの方が有利になる。
今回作成したいデスクトップアプリは複雑な画面を想定していないため、Swingを選択することにした。