Download presentation
Presentation is loading. Please wait.
1
JAVA入門後期⑦ JAVAのSwingの基本構造
2
Swingとは 1.Swing は、 GUI (Graphical User Interface) 用パッケージ
パッケージ名は javax.swing 2. AWT (Abstract Java Toolkit) で提供されていた GUI 機能 を強化 継承として実装されている AWT コンポーネントは必須(swing パッケージ以外に awt パッケージもインポートする必要がある) 3.Swingでは互換性が向上 AWT では 各 GUI 部品は、実行環境のウィンドウシステム を利用していたため、互換性に問題があり、部品の多いアプリケーションは重たくなる( “heavyweight” と呼ばれる) Swing は基本的には Java だけで書かれているので、互換 性が向上し、マシンリソースも少なくてむ( “lightweight” と 呼ばれる)
3
Swingアプリケーションの階層構造 1.Swing は三階層 ●トップレベルコンテナ(第一階層)
Frame: JFrameクラス Dialog: JDialogクラス Applet: JAppletクラス ●中間コンテナ(第二階層) 他のSwingコンポーネントを配置する為などに用いる Panel: Jpanelクラス Scroll pane: JScrollPaneクラス など ●コンポーネント 個々の部品を表す JButton, JComboBox, JTextField, JTextArea, JLabel, JFileChooser, JTable など
4
Swingアプリケーション作成手順 1.パッケージ java.awt.*, javax.swing.* のインポート
2.トップレベルコンテナのクラスを継承しクラスを作成する 3.部品のインスタンス化 3.1 トップレベルコンテナのインスタンス化 3.2 中間コンテナのインスタンス化 3.3 コンポーネントのインスタンス化 4.コンポーネントの配置 4.1 中間コンテナにレイアウトマネージャーを登録 4.2 コンポーネントを配置 5.コンポーネントにアクションリスナーを登録
5
Swingアプリケーション作成手順 6.中間コンテナの配置 6.1 トップレベルコンテナからコンテントペインの取得
6.1 トップレベルコンテナからコンテントペインの取得 6.2 コンテントペインにレイアウトマネージャーを登録 6.3 コンテントペインに中間コンテナを配置 7.メニュー部品のインスタンス化 7.1 メニューバーのインスタンス化 7.2 メニューのインスタンス化 7.3 メニューアイテムのインスタンス化 8.メニューアイテムにアクションリスナーを登録 9.メニューバーをフレームに追加 10.トップレベルコンテナのセットアップ
6
Swingアプリケーション作成手順 11.イベント処理(アクションリスナー、マウスイベント、等)
各イベント処理用のインターフェースを実装するクラスを 作成 ●以上が Swing アプリケーションで必要な基本的道具 あるものは必須ではなく、あるものは複数を組み合わせて 使う。 例えば、 ・中間コンテナは必ずしも必要ではなく、トップレベルコンテ ナに直接コンポーネントを配置しても良い ・レイアウトマネージャーは複数組み合わせることがある
7
簡単な例 import java.awt.*; import javax.swing.*;
public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JFrame frame; private JLabel label; // コンストラクター(別にメッソドを作成しても良い) HelloSwing(String title) { // JFrameのインスタンス化 frame = new JFrame(title); // JLabelのインスタンス化 label = new JLabel("Hello Swing!");
8
簡単な例 // JFrameのコンテントペインの取得 Container con = frame.getContentPane();
// コンテントペインにJLabelを配置 // (直接配置、レイアウトマネージャーも未使用) con.add(label); // フレームのセットアップ frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
9
実施結果
10
簡単な例(解説) 1.パッケージのインポート import java.awt.*; import javax.swing.*;
2.トップレベルコンテナのクラスを継承しクラスを作成する public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JFrame frame; private JLabel label; // コンストラクター(別にメッソドを作成しても良い) HelloSwing(String title) {
11
簡単な例(解説) 3.部品のインスタンス化 // JFrameのインスタンス化 frame = new JFrame(title);
// JLabelのインスタンス化 label = new JLabel("Hello World!"); 4.及び6.コンポーネントの配置 // JFrameのコンテントペインの取得 Container con = frame.getContentPane(); // コンテントペインにJLabelを配置 // (直接配置、レイアウトマネージャーも未使用) con.add(label);
12
簡単な例(解説) 10.トップレベルコンテナのセットアップ // フレームのセットアップ
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 順に、 ●クローズボタン(ウィンドウ右上の×ボタン)の処理(例ではプログラムを終了) ●推奨サイズでウィンドウを表示 ●ウィンドウを可視化 を行う
13
レイアウトマネージャー AWTと同じように、コンポーネントの配置方法を指定する方法 としてレイアウトマネージャーを使用する。
Swingでは、コンポーネントの他に、中間コンテナの配置もレイ アウトマネージャーで行う。 基本的に、レイアウトマネージャーは、AWTのものを利用してい る。 (Swingで幾つか追加されたものはあるが、滅多に使わない。) デフォルトは、AWTの時と同じFlowLayoutである。
14
レイアウトマネジャー(抜粋) 名前 説明 FlowLayout 左上から順に詰めていく BorderLayout
上下左右と中央の位置に最大5つの配置 CardLayout 同じ大きさのコンポーネントを重ね合わせて配置 GirdLayout 格子状に配置 GirdBagLayout 格子状に配置、柔軟な配置指定可能
15
FlowLayout (復習) ●左上から順に詰めていくように配置
書式: FlowLayout(int alignment, int hgaps, int vgaps) alignment : コンポーネントの配置位置 設定位置は以下。 ・ FlowLayout.CENTER 行内で中央揃え ・ FlowLayout.RIGHT 行内で右揃え ・ FlowLayout.LEFT 行内で左揃え ・ FlowLayout.TRAILING 行内で右端揃え ・ FlowLayout.LEADING 行内で左端揃え hgaps : コンポーネントの水平方向の間隔 vgaps : コンポーネントの垂直方向の間隔
16
FlowLayout (復習) デフォルトの設定 con.setLayout(new FlowLayout()); は
con.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5) と同じこと。
17
BoaderLayout (復習) ●コンポーネントを中央を中心にして、東西南北に配置
書式: BoaderLayout(int hgaps, int vgaps) hgaps:水平方向の間隔 vgaps:垂直方向の間隔 指定の方法例: con.setLayout(new BoaderLayout(5, 5)); Button bt1 = new Button(“button-North”); con.add(bt1, BoaderLayout.NORTH ); North West Center East South
18
BoaderLayout (復習) 配置の位置 設定名 北 “North” または、BorderLayout.NORTH 中央
“Center”または、BorderLayout.CENTER 南 “South” または、BorderLayout.SOUTH 東 “East” または、BorderLayout.EAST 西 “West” または、BorderLayout.WEST
19
GridLayout (復習) ●コンポーネントを指定された配列の格子状に配置 書式:
書式: GridLayout(int rows, int colums int haps, int vgaps) rows : 行の数 colums : 列の数 haps : 水平方向の間隔 vgaps : 垂直方向の間隔 配置される順番はaddメソッドの順に左上から右方向に配置 「行数×列数」>コンポーネントの場合、不足分は空き 「行数×列数」<コンポーネントの場合、列数が自動的に増加
20
レイアウトマネージャー使用例 import java.awt.*; import javax.swing.*;
public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JFrame frame; private JLabel label; private JButton button; // コンストラクター(別にメッソドを作成しても良い) HelloSwing(String title) { // JFrameのインスタンス化 frame = new JFrame(title); // JLabelのインスタンス化 label = new JLabel("Hello Swing!");
21
レイアウトマネージャー使用例 // JButtonのインスタンス化 button = new JButton("OK");
// JFrameのコンテントペインの取得 Container con = frame.getContentPane(); // コンテントペインにJLabel,JButtonを配置 con.setLayout(new FlowLayout()); con.add(label); con.add(button); // フレームのセットアップ frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
22
実行結果
23
中間コンテナ コンポーネントを直接トップレベルコンテナに配置するのではな く、幾つかのコンポーネントを一旦纏めで配置しておき、更に、
その幾つかの纏まったものをトップレベルコンテナに配置する、 といった二段構えのレイアウトを行うことが出来ます。 その中間的な纏め役をおこなうのが、中間コンテナです。 中間コンテナの例 JPanel: コンポーネントを纏める一般的なクラス JScrollPane: コンポーネントに付随してスクロールバー等を 追加します
24
中間コンテナ使用例 import java.awt.*; import javax.swing.*;
public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JFrame frame; private JPanel panel; private JScrollPane scroll; private JLabel label; private JButton button; private JTextArea textArea; // コンストラクター(別にメッソドを作成しても良い) HelloSwing(String title) { // JFrameのインスタンス化 frame = new JFrame(title);
25
中間コンテナ使用例 textArea = new JTextArea( "テキストが入力できます", 10, 30);
// JScrollPane のインスタンス化 scroll = new JScrollPane(textArea); scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scroll.setPreferredSize( new Dimension(500, 250)); // JPanelのインスタンス化 panel = new JPanel(); // JLabelのインスタンス化 label = new JLabel("Hello Swing!");
26
中間コンテナ使用例 // JButtonのインスタンス化 button = new JButton("OK"); // コンポーネントの追加
panel.setLayout(new FlowLayout()); panel.add(label); panel.add(button); // JFrameのコンテントペインの取得 Container con = frame.getContentPane(); // コンテントペインにJPanel, JScrollPaneを配置 con.setLayout(new BorderLayout()); con.add(panel, BorderLayout.NORTH); con.add(scroll, BorderLayout.CENTER);
27
中間コンテナ使用例 // フレームのセットアップ frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
28
実行結果
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.