1. 主要な JavaGUI 開発ツール - Swing クラス ライブラリの誕生と機能
資格のある Java 開発者は、テクノロジーを習得するだけでなく、ある程度の Java の歴史的背景知識も持っている必要があります。そこでまず、JavaGUI 開発に使用される主要なクラス ライブラリである Swing を簡単に紹介します。
Java 1.0の時代には、GUIを設計するための基本的なクラスライブラリであるAbstract Window Toolkit、略してAWTがありました。 AWT ライブラリの動作原理は、ユーザー インターフェイス要素の処理タスクをターゲット プラットフォーム (オペレーティング システム) のローカル GUI ツールボックスに委任することであり、ローカル GUI ツールボックスはユーザー インターフェイス要素の作成とアクションを担当します。この作業方法には利点と欠点があります。まず利点について説明します:
処理速度が速くなる可能性があります。
さまざまなプラットフォームに適応でき、「一度書いたらどこでも使用できます」。
欠点:
見た目や操作感はターゲット プラットフォームによって異なります。
一部のプラットフォームには、Windows や Mac (初期) ほど豊富なインターフェイス コンポーネントがありません。したがって、AWTの設計作業は「最小公倍数」に限定されます。
プラットフォームが異なれば、バグも異なります。
1996 年に、Netscape は別の GUI ライブラリである IFC を作成しました。これは、空白のウィンドウにユーザー インターフェイス コンポーネントを描画することで機能し、ピアは空白のウィンドウの作成と描画のみを行う必要があります。 Sun と Netscape は協力してこのアプローチを完成させ、Swing と呼ばれるユーザー インターフェイス ライブラリを作成しました。これが Swing の誕生です。
しかし、Swing は AWT を完全に置き換えたわけではありません。現在、Java SE 8 にはまだ AWT と Swing の 2 つの関数クラス ライブラリがあります:
AWT import java.awt (Java はコア パッケージ)
Swing import javax.swing ( javax パッケージ) (機能拡張パック)
Swing が AWT を完全に置き換えていない理由は、Swing が AWT アーキテクチャに基づいており、Swing はより強力なユーザー インターフェイス コンポーネントのみを提供するためです。 Swing で書かれたプログラムでも、イベント処理には AWT が必要です。簡単に言うと、Swing はユーザー インターフェイス クラスであり、AWT はその基礎となるメカニズムです。
2. JFrameフレームワークを作成します
フレームとは、最上位のウィンドウであるフレームを意味し、フレームにコンポーネントを追加できます。ウィンドウを作成するときは、まずフレームを作成する必要があります。
注: JButton、JFrame など、Swing コンポーネント クラスはすべて「J」で始まります。AWT コンポーネントには「J」がありません。 Swing コンポーネントを AWT コンポーネントと一緒に使用すると、視覚的および動作上の不一致が生じる可能性があります。
さて、空のフレームを作成しましょう:
package simpleFrame; //会用到awt和swing的类,先import。 import java.awt.*; import javax.swing.*; //创建一个SimpleFrame的类,里面只有一个main函数,main函数里有个事件分派线程。 public class SimpleFrame { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new SizedFrame(); //new一个SizeFrame对象给frame变量管理,这便有了框架。SizeFrame是JFrame的子类。 frame.setTitle("SimpleFrame"); //设置框架的标题. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定关闭按钮。 frame.setVisible(true); //设定框架可见。 } }); } } //其实到这里为止,我们可以在第12行直接new一个JFrame交给frame,但是JFrame默认框架大小是0×0,没什么实际意义。 //所以我们选择继承JFrame做一个子类起名SizedFrame,在这个类里做一个构造器来设定框架的大小。 class SizedFrame extends JFrame { //构造器 public SizedFrame() { //下面四行代码为获取你pc屏幕的高度和宽度,交给int变量screenHeight和screenWidth。 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenHeight = screenSize.height; int screenWidth = screenSize.width; //setSize方法由父类Component类(GUI对象的祖先)继承而来。设定框架长宽都为屏幕的1/2. //setLocationByPlatform由Window类(Frame类的父类)继承而来。由平台(操作系统)来选择一个合适的显示位置。 setSize(screenWidth/2,screenHeight/2); setLocationByPlatform(true); //setIconImage方法由Frame类继承而来,设置框架图标。 Image img = new ImageIcon("icon.gif").getImage(); setIconImage(img); //当然,事件分派线程里的设定标题、设定关闭按钮、和设定框架可见操作,也可以放在构造器里来做。 } }
Windows 10 で実行:
3. コンポーネント JComponent をフレームに追加します