SWING-クイックガイド
Swing APIは、JAVAベースのフロントエンド/ GUIアプリケーションを作成するための開発者の作業を容易にする拡張可能なGUIコンポーネントのセットです。AWT APIの上に構築されており、AWTコントロールに対応するほぼすべてのコントロールがあるため、AWTAPIの代わりとして機能します。Swingコンポーネントは、Model-View-Controllerアーキテクチャに従って、次の基準を満たします。
複数のルックアンドフィールをサポートするには、単一のAPIで十分です。
APIはモデル駆動型であるため、最高レベルのAPIにデータが必要ありません。
APIは、Java Beanモデルを使用して、ビルダーツールとIDEが開発者に使用するためのより良いサービスを提供できるようにすることです。
MVCアーキテクチャ
Swing APIアーキテクチャは、次のように大まかに基づいたMVCアーキテクチャに従います。
モデルはコンポーネントのデータを表します。
ビューは、コンポーネントのデータの視覚的表現を表します。
コントローラは、ビューでユーザーからの入力を受け取り、コンポーネントのデータの変更を反映します。
Swingコンポーネントには、別個の要素としてModelがあり、ViewおよびController部分はUserInterface要素に組み込まれています。そのため、Swingにはプラグ可能なルックアンドフィールアーキテクチャがあります。
スイング機能
Light Weight − Swing APIコントロールは、基盤となるオペレーティングシステムコールではなく純粋なJAVAコードを使用してレンダリングされるため、SwingコンポーネントはネイティブオペレーティングシステムのAPIから独立しています。
Rich Controls − Swingは、Tree、TabbedPane、スライダー、カラーピッカー、テーブルコントロールなどの高度なコントロールの豊富なセットを提供します。
Highly Customizable −視覚的な外観は内部表現に依存しないため、スイングコントロールは非常に簡単な方法でカスタマイズできます。
Pluggable look-and-feel − SWINGベースのGUIアプリケーションのルックアンドフィールは、使用可能な値に基づいて、実行時に変更できます。
このセクションでは、マシンにJavaをダウンロードしてセットアップする方法について説明します。以下の手順で環境を設定してください。
Java SEは、Javaのダウンロードリンクから無料で入手できます。したがって、オペレーティングシステムに基づいたバージョンをダウンロードできます。
指示に従ってJavaをダウンロードし、 .exeマシンにJavaをインストールします。マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります。
Windows 2000 / XPのパスの設定
Javaをにインストールしたと仮定します c:\Program Files\java\jdk ディレクトリ-
Step 1 −「マイコンピュータ」を右クリックして「プロパティ」を選択します。
Step 2 − [詳細設定]タブの下の[環境変数]ボタンをクリックします。
Step 3−「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。例、パスが現在に設定されている場合'C:\WINDOWS\SYSTEM32'、次にパスを変更して読み取ります 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'。
Windows 95/98 / MEのパスの設定
Javaをにインストールしたと仮定します c:\Program Files\java\jdk ディレクトリ-
Step 1 −編集 'C:\autoexec.bat' ファイルを作成し、最後に次の行を追加します。 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'。
Linux、UNIX、Solaris、FreeBSDのパスの設定
環境変数PATHは、Javaバイナリがインストールされている場所を指すように設定する必要があります。これを行うのに問題がある場合は、シェルのドキュメントを参照してください。
例、使用する場合 bash シェルとして、最後に次の行を追加します '.bashrc: export PATH=/path/to/java:$PATH'。
人気のあるJavaエディター
Javaプログラムを作成するには、テキストエディタが必要です。市場にはさらに洗練されたIDEがあります。しかし今のところ、あなたは次のいずれかを考えることができます-
Notepad − Windowsマシンでは、メモ帳(このチュートリアルに推奨)、TextPadなどの単純なテキストエディターを使用できます。
Netbeans − Netbeansは、オープンソースで無料のJava IDEであり、からダウンロードできます。 https://www.netbeans.org/index.html。
Eclipse − Eclipseは、Eclipseオープンソースコミュニティによって開発されたJava IDEでもあり、からダウンロードできます。 https://www.eclipse.org/。
すべてのユーザーインターフェイスは、次の3つの主要な側面を考慮します-
UI Elements−これらは、ユーザーが最終的に見て操作するコア視覚要素です。GWTは、基本的なものから複雑なものまで、広く使用されている一般的な要素の膨大なリストを提供します。これについては、このチュートリアルで説明します。
Layouts− UI要素を画面上でどのように編成するかを定義し、GUI(グラフィカルユーザーインターフェイス)に最終的なルックアンドフィールを提供します。この部分については、レイアウトの章で説明します。
Behavior−これらは、ユーザーがUI要素を操作したときに発生するイベントです。この部分については、イベント処理の章で説明します。
すべてのSWINGコントロールは、次のコンポーネントクラス階層からプロパティを継承します。
S.No. | クラスと説明 |
---|---|
1 | 成分 コンポーネントは、SWINGのメニュー以外のユーザーインターフェイスコントロールの抽象基本クラスです。コンポーネントは、グラフィカル表現でオブジェクトを表します |
2 | コンテナ コンテナは、他のSWINGコンポーネントを含めることができるコンポーネントです。 |
3 | JComponent JComponentは、すべてのSWINGUIコンポーネントの基本クラスです。JComponentから継承するSWINGコンポーネントを使用するには、コンポーネントが、ルートが最上位のSWINGコンテナである包含階層に存在する必要があります。 |
SWINGUI要素
以下は、SWINGを使用してGUIを設計する際に一般的に使用されるコントロールのリストです。
S.No. | クラスと説明 |
---|---|
1 | JLabel JLabelオブジェクトは、テキストをコンテナに配置するためのコンポーネントです。 |
2 | JButton このクラスは、ラベル付きボタンを作成します。 |
3 | JColorChooser JColorChooserは、ユーザーが色を操作および選択できるように設計されたコントロールのペインを提供します。 |
4 | Jチェックボックス JCheckBoxは、次のいずれかに配置できるグラフィカルコンポーネントです。 on (true)または off (false)状態。 |
5 | JRadioButton JRadioButtonクラスは、次のいずれかになり得るグラフィカルコンポーネントです。 on (true)または off(false)状態。グループで。 |
6 | JList JListコンポーネントは、テキストアイテムのスクロールリストをユーザーに提示します。 |
7 | JComboBox JComboBoxコンポーネントは、選択肢のメニューを表示するためのをユーザーに提示します。 |
8 | JTextField JTextFieldオブジェクトは、1行のテキストの編集を可能にするテキストコンポーネントです。 |
9 | JPasswordField JPasswordFieldオブジェクトは、パスワード入力に特化したテキストコンポーネントです。 |
10 | JTextArea JTextAreaオブジェクトは、複数行のテキストの編集を可能にするテキストコンポーネントです。 |
11 | ImageIcon ImageIconコントロールは、画像からアイコンをペイントするアイコンインターフェイスの実装です。 |
12 | JScrollbar スクロールバーコントロールは、ユーザーが値の範囲から選択できるようにするためのスクロールバーコンポーネントを表します。 |
13 | JOptionPane JOptionPaneは、ユーザーに値の入力を求める、またはユーザーに何かを通知する一連の標準ダイアログボックスを提供します。 |
14 | JFileChooser JFileChooserコントロールは、ユーザーがファイルを選択できるダイアログウィンドウを表します。 |
15 | JProgressBar タスクが完了に向かって進行すると、進行状況バーにタスクの完了率が表示されます。 |
16 | JSlider JSliderを使用すると、ユーザーは、制限された間隔内でノブをスライドさせることにより、値をグラフィカルに選択できます。 |
17 | JSpinner JSpinnerは、ユーザーが順序付けられたシーケンスから数値またはオブジェクト値を選択できるようにする1行の入力フィールドです。 |
この章では、イベントとそのタイプについて学習し、イベントの処理方法についても学習します。理解を深めるために、この章の最後に例を示します。
イベントとは何ですか?
オブジェクトの状態の変化は、として知られています Eventつまり、イベントはソースの状態の変化を表します。イベントは、グラフィカルユーザーインターフェイスコンポーネントとのユーザーインタラクションの結果として生成されます。たとえば、ボタンのクリック、マウスの移動、キーボードからの文字の入力、リストからの項目の選択、およびページのスクロールは、イベントを発生させるアクティビティです。
イベントの種類
イベントは大きく2つのカテゴリに分類できます-
Foreground Events−これらのイベントには、ユーザーの直接の対話が必要です。それらは、人がグラフィカルユーザーインターフェイスのグラフィカルコンポーネントと対話した結果として生成されます。たとえば、ボタンのクリック、マウスの移動、キーボードからの文字の入力、リストからの項目の選択、ページのスクロールなどです。
Background Events−これらのイベントには、エンドユーザーの操作が必要です。オペレーティングシステムの割り込み、ハードウェアまたはソフトウェアの障害、タイマーの有効期限、および操作の完了は、バックグラウンドイベントの例です。
イベント処理とは何ですか?
イベント処理は、イベントを制御し、イベントが発生した場合に何が発生するかを決定するメカニズムです。このメカニズムには、イベントが発生したときに実行されるイベントハンドラーと呼ばれるコードがあります。
Javaは、委任イベントモデルを使用してイベントを処理します。このモデルは、イベントを生成および処理するための標準メカニズムを定義します。
委任イベントモデルには、次の主要な参加者がいます。
Source−ソースは、イベントが発生するオブジェクトです。ソースは、発生したイベントの情報をハンドラーに提供する責任があります。Javaは、ソースオブジェクトのクラスを提供します。
Listener−イベントハンドラとも呼ばれます。リスナーは、イベントへの応答を生成する責任があります。Java実装の観点からは、リスナーもオブジェクトです。リスナーは、イベントを受信するまで待機します。イベントが受信されると、リスナーはイベントを処理してから戻ります。
このアプローチの利点は、ユーザーインターフェイスロジックがイベントを生成するロジックから完全に分離されていることです。ユーザーインターフェイス要素は、イベントの処理を別のコードに委任できます。
このモデルでは、リスナーがイベント通知を受信できるように、リスナーをソースオブジェクトに登録する必要があります。イベント通知は受信したいリスナーにのみ送信されるため、これはイベントを処理する効率的な方法です。
イベント処理に関連する手順
Step 1 −ユーザーがボタンをクリックすると、イベントが生成されます。
Step 2 −関連するイベントクラスのオブジェクトが自動的に作成され、ソースとイベントに関する情報が同じオブジェクト内に入力されます。
Step 3 −イベントオブジェクトは、登録されたリスナークラスのメソッドに転送されます。
Step 4 −メソッドが実行されて戻ります。
リスナーについて覚えておくべきポイント
リスナークラスを設計するには、いくつかのリスナーインターフェイスを開発する必要があります。これらのリスナーインターフェイスは、リスナークラスによって実装する必要があるいくつかのパブリック抽象コールバックメソッドを予測します。
事前定義されたインターフェイスを実装しない場合、クラスはソースオブジェクトのリスナークラスとして機能できません。
コールバックメソッド
これらは、APIプロバイダーによって提供され、アプリケーションプログラマーによって定義され、アプリケーション開発者によって呼び出されるメソッドです。ここで、コールバックメソッドはイベントメソッドを表します。イベントに応答して、javajreはコールバックメソッドを起動します。このようなコールバックメソッドはすべて、リスナーインターフェイスで提供されます。
コンポーネントが一部のリスナーにそのイベントをリッスンさせたい場合、ソースはそれ自体をリスナーに登録する必要があります。
イベント処理の例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 D:/ > SWING > com > tutorialspoint > gui >
SwingControlDemo.java
package com.tutorialspoint.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingControlDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public SwingControlDemo(){
prepareGUI();
}
public static void main(String[] args){
SwingControlDemo swingControlDemo = new SwingControlDemo();
swingControlDemo.showEventDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("Java SWING Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
headerLabel = new JLabel("",JLabel.CENTER );
statusLabel = new JLabel("",JLabel.CENTER);
statusLabel.setSize(350,100);
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private void showEventDemo(){
headerLabel.setText("Control in action: Button");
JButton okButton = new JButton("OK");
JButton submitButton = new JButton("Submit");
JButton cancelButton = new JButton("Cancel");
okButton.setActionCommand("OK");
submitButton.setActionCommand("Submit");
cancelButton.setActionCommand("Cancel");
okButton.addActionListener(new ButtonClickListener());
submitButton.addActionListener(new ButtonClickListener());
cancelButton.addActionListener(new ButtonClickListener());
controlPanel.add(okButton);
controlPanel.add(submitButton);
controlPanel.add(cancelButton);
mainFrame.setVisible(true);
}
private class ButtonClickListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if( command.equals( "OK" )) {
statusLabel.setText("Ok Button clicked.");
} else if( command.equals( "Submit" ) ) {
statusLabel.setText("Submit Button clicked.");
} else {
statusLabel.setText("Cancel Button clicked.");
}
}
}
}
コマンドプロンプトを使用してプログラムをコンパイルします。に移動D:/ > SWING 次のコマンドを入力します。
D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java
エラーが発生しない場合は、コンパイルが成功したことを意味します。次のコマンドを使用してプログラムを実行します。
D:\AWT>java com.tutorialspoint.gui.SwingControlDemo
次の出力を確認します。
イベントクラスはイベントを表します。Javaはさまざまなイベントクラスを提供しますが、より頻繁に使用されるクラスについてのみ説明します。
EventObjectクラス
これは、すべてのイベント状態オブジェクトの派生元となるルートクラスです。すべてのイベントは、オブジェクトへの参照を使用して構築されます。source、それは論理的に、問題のイベントが最初に発生したオブジェクトと見なされます。このクラスはで定義されていますjava.util パッケージ。
クラス宣言
以下はの宣言です java.util.EventObject クラス-
public class EventObject
extends Object
implements Serializable
フィールド
以下はのフィールドです java.util.EventObject クラス-
protected Object source −イベントが最初に発生したオブジェクト。
クラスコンストラクタ
シニア番号 | コンストラクターと説明 |
---|---|
1 | EventObject(Object source) プロトタイプのイベントを作成します。 |
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | Object getSource() イベントが最初に発生したオブジェクト。 |
2 | String toString() このEventObjectの文字列表現を返します。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
SWINGイベントクラス
以下は、一般的に使用されるイベントクラスのリストです。
シニア番号 | クラスと説明 |
---|---|
1 | AWTEvent これは、すべてのSWINGイベントのルートイベントクラスです。このクラスとそのサブクラスは、元のクラスに優先しますjava.awt.Event クラス。 |
2 | ActionEvent ActionEventは、ボタンがクリックされるか、リストの項目がダブルクリックされると生成されます。 |
3 | InputEvent InputEventクラスは、すべてのコンポーネントレベルの入力イベントのルートイベントクラスです。 |
4 | KeyEvent 文字を入力すると、Keyイベントが生成されます。 |
5 | MouseEvent このイベントは、コンポーネントでマウスアクションが発生したことを示します。 |
6 | WindowEvent このクラスのオブジェクトは、ウィンドウの状態の変化を表します。 |
7 | AdjustEvent このクラスのオブジェクトは、Adjustableオブジェクトによって発行される調整イベントを表します。 |
8 | ComponentEvent このクラスのオブジェクトは、ウィンドウの状態の変化を表します。 |
9 | ContainerEvent このクラスのオブジェクトは、ウィンドウの状態の変化を表します。 |
10 | MouseMotionEvent このクラスのオブジェクトは、ウィンドウの状態の変化を表します。 |
11 | PaintEvent このクラスのオブジェクトは、ウィンドウの状態の変化を表します。 |
イベントリスナーは、イベントの処理を担当するインターフェイスを表します。Javaはさまざまなイベントリスナークラスを提供しますが、より頻繁に使用されるクラスについてのみ説明します。イベントリスナーメソッドのすべてのメソッドには、EventObjectクラスのサブクラスであるオブジェクトとして単一の引数があります。たとえば、マウスイベントリスナーメソッドは、MouseEventのインスタンスを受け入れます。MouseEventはEventObjectから派生します。
EventListnerインターフェース
これは、すべてのリスナーインターフェイスを拡張する必要があるマーカーインターフェイスです。このクラスはで定義されていますjava.util パッケージ。
クラス宣言
以下はの宣言です java.util.EventListener インターフェイス-
public interface EventListener
SWINGイベントリスナーインターフェイス
以下は、一般的に使用されるイベントリスナーのリストです。
シニア番号 | クラスと説明 |
---|---|
1 | ActionListener このインターフェイスは、アクションイベントを受信するために使用されます。 |
2 | ComponentListener このインターフェイスは、コンポーネントイベントを受信するために使用されます。 |
3 | ItemListener このインターフェイスは、アイテムイベントを受信するために使用されます。 |
4 | KeyListener このインターフェースは、主要なイベントを受信するために使用されます。 |
5 | MouseListener このインターフェイスは、マウスイベントを受信するために使用されます。 |
6 | WindowListener このインターフェイスは、ウィンドウイベントを受信するために使用されます。 |
7 | AdjustListener このインターフェースは、調整イベントを受信するために使用されます。 |
8 | ContainerListener このインターフェースは、コンテナーイベントを受信するために使用されます。 |
9 | MouseMotionListener このインターフェイスは、マウスモーションイベントを受信するために使用されます。 |
10 | FocusListener このインターフェイスは、フォーカスイベントを受信するために使用されます。 |
アダプタは、さまざまなイベントを受信するための抽象クラスです。これらのクラスのメソッドは空です。これらのクラスは、リスナーオブジェクトを作成するための便利なものとして存在します。
SWINGアダプター
以下は、SWINGでGUIイベントをリッスンするときに一般的に使用されるアダプターのリストです。
シニア番号 | アダプターと説明 |
---|---|
1 | FocusAdapter フォーカスイベントを受信するための抽象アダプタクラス。 |
2 | KeyAdapter キーイベントを受信するための抽象アダプタクラス。 |
3 | MouseAdapter マウスイベントを受信するための抽象アダプタクラス。 |
4 | MouseMotionAdapter マウスモーションイベントを受信するための抽象アダプタクラス。 |
5 | WindowAdapter ウィンドウイベントを受信するための抽象アダプタクラス。 |
レイアウトとは、コンテナ内のコンポーネントの配置を指します。別の言い方をすれば、レイアウトはコンポーネントをコンテナ内の特定の位置に配置していると言えます。コントロールのレイアウトタスクは、レイアウトマネージャーによって自動的に実行されます。
レイアウトマネージャー
レイアウトマネージャーは、コンテナー内のすべてのコンポーネントを自動的に配置します。レイアウトマネージャーを使用しない場合でも、コンポーネントはデフォルトのレイアウトマネージャーによって配置されます。手作業でコントロールを配置することは可能ですが、以下の2つの理由により非常に困難になります。
コンテナ内で多数のコントロールを処理するのは非常に面倒です。
通常、コンポーネントを配置する必要がある場合、コンポーネントの幅と高さの情報は提供されません。
Javaには、コントロールを配置するためのさまざまなレイアウトマネージャーが用意されています。サイズ、形状、配置などのプロパティは、レイアウトマネージャーごとに異なります。アプレットまたはアプリケーションウィンドウのサイズが変更されると、コンポーネントのサイズ、形状、および配置もそれに応じて変更されます。つまり、レイアウトマネージャはアプレットビューアまたはアプリケーションウィンドウの寸法に適応します。
レイアウトマネージャーは、すべてのContainerオブジェクトに関連付けられています。各レイアウトマネージャーは、LayoutManagerインターフェイスを実装するクラスのオブジェクトです。
以下は、レイアウトマネージャーの機能を定義するインターフェースです。
シニア番号 | インターフェースと説明 |
---|---|
1 | LayoutManager LayoutManagerインターフェイスは、オブジェクトがレイアウトマネージャーとして機能するクラスによって実装される必要があるメソッドを宣言します。 |
2 | LayoutManager2 LayoutManager2は、LayoutManagerのサブインターフェイスです。このインターフェースは、レイアウト制約オブジェクトに基づいてコンテナーをレイアウトする方法を知っているクラス向けです。 |
AWTレイアウトマネージャークラス
以下は、AWTを使用してGUIを設計する際に一般的に使用されるコントロールのリストです。
シニア番号 | レイアウトマネージャーと説明 |
---|---|
1 | BorderLayout borderlayoutは、コンポーネントを東、西、北、南、および中央の5つの領域に収まるように配置します。 |
2 | CardLayout CardLayoutオブジェクトは、コンテナ内の各コンポーネントをカードとして扱います。一度に表示できるカードは1枚だけです。 |
3 | FlowLayout FlowLayoutがデフォルトのレイアウトです。コンポーネントを方向性のあるフローでレイアウトします。 |
4 | グリッドレイアウト GridLayoutは、長方形グリッドの形式でコンポーネントを管理します。 |
5 | GridBagLayout これは最も柔軟なレイアウトマネージャークラスです。GridBagLayoutのオブジェクトは、同じサイズのコンポーネントを必要とせずに、コンポーネントを垂直、水平、またはベースラインに沿って配置します。 |
6 | GroupLayout GroupLayoutは、コンポーネントをコンテナに配置するために、コンポーネントを階層的にグループ化します。 |
7 | SpringLayout SpringLayoutは、一連の制約に従って、関連付けられたコンテナの子を配置します。 |
ご存知のとおり、すべてのトップレベルウィンドウにはメニューバーが関連付けられています。このメニューバーは、エンドユーザーが利用できるさまざまなメニュー選択肢で構成されています。さらに、各選択肢には、ドロップダウンメニューと呼ばれるオプションのリストが含まれています。MenuおよびMenuItemコントロールは、MenuComponentクラスのサブクラスです。
メニュー階層
メニューコントロール
シニア番号 | クラスと説明 |
---|---|
1 | JMenuBar JMenuBarオブジェクトは、トップレベルウィンドウに関連付けられています。 |
2 | JMenuItem メニューの項目は、JMenuItemまたはそのサブクラスのいずれかに属している必要があります。 |
3 | JMenu JMenuオブジェクトは、メニューバーから表示されるプルダウンメニューコンポーネントです。 |
4 | JCheckboxMenuItem JCheckboxMenuItemは、JMenuItemのサブクラスです。 |
5 | JRadioButtonMenuItem JRadioButtonMenuItemは、JMenuItemのサブクラスです。 |
6 | JPopupMenu JPopupMenuは、コンポーネント内の指定された位置に動的にポップアップできます。 |
コンテナはSWINGGUIコンポーネントの不可欠な部分です。コンテナは、コンポーネントを配置できるスペースを提供します。AWTのコンテナはそれ自体がコンポーネントであり、コンポーネントをそれ自体に追加する機能を提供します。以下は、考慮すべき特定の注目すべき点です。
ContainerのサブクラスはContainerと呼ばれます。たとえば、JPanel、JFrame、JWindowなどです。
コンテナは、コンポーネントのみをそれ自体に追加できます。
デフォルトのレイアウトは各コンテナに存在し、を使用してオーバーライドできます setLayout 方法。
SWINGコンテナ
以下は、SWINGを使用してGUIを設計する際に一般的に使用されるコンテナーのリストです。
シニア番号 | コンテナと説明 |
---|---|
1 | パネル JPanelは最も単純なコンテナです。他のパネルを含む他のコンポーネントを配置できるスペースを提供します。 |
2 | フレーム JFrameは、タイトルと境界線のあるトップレベルウィンドウです。 |
3 | 窓 JWindowオブジェクトは、境界線やメニューバーのないトップレベルのウィンドウです。 |