Java はawt (Abstract Windowing Toolkit) で始まり、後にswingが導入されました。
AWTでは、プラットフォームのイベント処理ループがフックされ、イベントは独自の Java クラスにパックされ、1 つの (非並列) イベント処理キュー/スレッドがそれらを次々に処理します。Swing はこれを継承しています。
AWTでは、ラジオ ボタンやメニュー項目などのすべての GUI コンポーネントに、プラットフォームが提供するコンポーネントであるネイティブ コードの「ピア」コントロールがあります。Java クラスとそれに対応する C の並列セットがあります。特に興味深いのは、線や長方形などのカスタム描画を可能にする Java Graphics クラスです。おそらく、CDC(デバイスコンテキスト)を使用してWindowsでピアリングされます。
Swingでは、ほとんどのプラットフォーム コンポーネントがエミュレートされます。つまり、描画、マウス操作など、自分自身を再作成します。したがって、ネイティブ部分はより単純です。たとえば、カスタム描画を使用した CWnd (ウィンドウ コンポーネント) などです。
Swing は、より一貫性のある、より機能豊富な機能を実現できます。AWT ラジオ ボタンに背景色を設定したり、ラベルやツール ヒントに HTML を使用したりすることができないことは想像に難くありません。また、Swing はスキニング、テーマ、LookAndFeels を実行できます。システムのルック アンド フィールは、プラットフォーム コンポーネントによく似ています。特に Swing コンポーネントはより軽量です。なぜなら、すべてのコンポーネントが C で処理されるネイティブ ピア コントロールを備えているわけではないからです。
現在、 SWTは IBM のその後のイニシアチブであり、Eclipse で AWT の再ロードが実現されました。Swing ほどカスタマイズ可能ではありませんが、プラットフォームに近いことを目的としています。
AWT コンポーネントの使用を忘れる必要があります。Eclipse RCP 用にプログラミングしない場合は、SWT も忘れてはなりません。
つまり、マウス クリックや再描画要求などのグローバル プラットフォーム イベントは、Java イベントに変換されます。JFrame、JPanels、JScrollPanes、JComponents のコンテナ階層があります。イベントは処理コンポーネントにディスパッチされます。たとえば、paintComponent が呼び出されます。
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
g2.draw...
}
JavaFXでは、まだ完全には成熟していませんが、非運用コードで使用できる新しいプレーヤーが登場します。エフェクト/アニメーション、回転、変換、ライトを有効にします。つまり、2D - 4D レンダリングは、プラットフォーム レンダリングに基づいています。また、プロパティベースであるため、チェックボックスは必ずしもブール値にバインドされるとは限りませんが、変更を監視および通知するブール値のプロパティです。最適なアーキテクチャを考えるには、まだ実践的な経験が必要です。