Graphics and Image Manipulations

GUIコンポーネントの設定と配置
Creation and positioning of GUI components
• java.awt 継承階層 Inheritance hierarchy
• コンポーネント Component
• コンポーネントレイアウト Layout
• パネル Panel
• フレーム Frame
java.awt継承階層
(abstract window toolkit) Hierarchy Component例
TextField
java.lang.Object
TextComponent
java.lang.Object
|
+--java.awt.Component
CheckboxGroup
TextArea
Button
|
+--java.awt.Label
Component
Label
Container
Panel
List
Window
Java.applet.Applet
FlowLayout
Frame
BorderLayout
Choice
GridLayout
三種類のレイアウト
Checkbox
GUI Components
次に説明します
コンポーネント:ラベル
Label
ラベル: 編集不能なテキストを表示する部品。
読み出し専用テキストを一行だけ表示する。
コンストラクタとメソッド
public Label()
public Label(String s)
public Label(String s, int alignment)
public String getText()
public void setText(String s)
public void setAlignment(int alignment)
使い方
例のソース
private Label label;
label = new Label();
label.setText(“Label demo”);
//label = new Label(“Label demo”);
label.setAlignment(Label.CENTER);
//label = new Label(“Label demo”, Label.CENTER);
add(label);
String s は
ラベルのテキスト
int alignment は表示位
置:
Label.LEFT
Label.CENTER
Label.RIGHT
……
g.drawString(“text is: ” + label.getText(), 20, 30);
Containerから継承したadd()メソッドを
使って(add(label); )、labelをアプレット
に追加します。
コンポーネント:テキストフィールド
TextField
テキストフィールド: キーボードからテキストを入力できる部品。
ユーザがテキストフィールドにデータを入力して
Enterキーを押すと、アクションイベントが生成されます。
コンストラクタとメソッド
使い方
例のソース
private TextField password;
public TextField()
public TextField(int columns)
public TextField(String s)
public TextField(String s, int columns)
public void setEditable(boolean b)
public void setEchoChar(Char c)
password = new TextField(“secrete”, 20);
password.setEchoChar(‘*’); //マスク文字
password.setEditable(false); //編集不可
//password.setEditable(true); 編集可
add(password);
……
true: 編集可能
false: 編集不能
String s は
表示するテキスト
int columns は
列数(長さ)
マスク文字は
パスワードを入力する時
に利用すると便利
Containerから継承したadd()メソッドを
使って(add(password); )、password
テキストフィールドをアプレットに追加し
ます。
ボタン:押しボタン、選択ボタン
Button, Choice, Checkbox
ボタンはクリックして特定のアクションを選択するためのGUIコンポーネントです。
Javaでは、押しボタン、選択ボタン、チェックボックスの3種類がつかえます。
コンストラクタとメソッド
使い方
例のソース
private Button button;
public Button(String s)
button = new Button("addition");
public Choice()
// button.addActionListener(this);
public String getItem(int index)
public synchronized void add(String s)
public synchronized String getSelectedItem()
public int getSelectedIndex()
public synchronized void insert(String s, int index)
public synchronized void remove(String s)
指定インデック
スに新しい項
目を追加する
指定した項目を
選択ボタンに追
加する
add(button);
private Choice choice;
choice = new Choice();
choice.add("English");
choice.add(“日本語”);
//choice.addItemListener(this);
add(choice);
choice.insert(“中国語”, 1);
ボタン: チェックボックス、ラジオボタン
Checkbox, Checkbox + CheckboxGroup
チェックボックスとラジオボタンはクラスCheckboxから作ります。
Demo
使い方
ソース
コンストラクタとメソッド
public Checkbox(String s)
private Checkbox fontBold;
fontBold = new Checkbox("Bold");
public CheckboxGroup()
//CheckboxGroupオブジェクトを生成する
//fontBold.addItemListener(this);
add(fontBold);
public Checkbox(
String s,
//ラジオボタンのラベル
CheckboxGroup c,
boolean state)
//ラジオボタンの状態
指定されたラベルと状態を持ちラジ
オボタンを一つ生成して、既存の
CheckboxGroup cに追加する
private Checkbox fontcolor;
private CheckboxGroup fontcolor;
fontcolor = new CheckboxGroup();
colorRed = new Checkbox("red", fontcolor, true);
//colorRed.addItemListener(this);
add(colorRed);
1組のラジオボタンは、1個のCheckboxGroupオブ
ジェクトおよび複数個のCheckboxオブジェクトから構
成されますが、同時には1個ボタンしか選べません。
……
コンポーネント:選択リスト
List
リスト: 選択項目のリストの中から1項目をクルックして選べる部品。
1項目しか選択できないものを単一選択リスト、複数の項目
を同時に選択できるものを多重選択リストと呼びます。
Demo
ソース
使い方
コンストラクタとメソッド
private List colorlist;
public List(int item, boolean b)
colorlist = new List(3, false); //単一選択リスト
public String getItem(int index)
public synchronized void add(String s)
public synchronized String getSelectedItem()
public int getSelectedIndex()
public synchronized void remove(String s)
//true 多重選択リスト
//colorlist.addActionListener(this);
//colorlist.addItemListener(this);
colorlist.add("red");
colorlist.add("green");
ComponentクラスにはChoiceやList
で共通に使えるメソッドがいくつか
定義されています。
colorlist.add("blue");
指定した項目を
選択リストに追
加する
add(colorlist);
colorlist.remove(“green”);
選択リストから
指定した項目
を削除する
コンポーネント:テキストエリア
TextArea
TextArea:複数行のテキストを操作(入力、編集、表示)
することができます。
コンストラクタとメソッド
使い方
ソース
public TextArea()
public TextArea(int rows, int columns)
public TextArea(String s)
public TextArea(String s, int rows, int
columns)
public TextArea(
String s, int rows, int columns, int scrollbar)
private TextArea area;
public void setEditable(boolean b)
add(area);
TextFieldと違う:
TextFieldは一行のテキスト
(データ)を操作しますが、
TextAreaは複数行のテキス
トを操作します。
この二行は以下の一行
Demo
area = new TextArea("Hello!", 10, 40);
//area = new TextArea(10, 40);
//area.setText(“Hello!”);
//area.addTextListener(this);
area.setEditable(false);
false – 編集不可
true – 編集可
area.append("This is a demo." +"\n");
area = new TextArea(“Hello!”, 10,
40);と同じです。
指定したテキストを
テキストエリアに追
加します
“\n” は改行です
レイアウトマネージャ
Layout Manager
FlowLayout
ソース Demo
GUIコンポーネントが」コンテナに追加された順
に左から右に配置します
setLayout(new
FlowLayout(FlowLayou.RIGHT));
add(label);
public FlowLayout()
……
public FlowLayout(int p)
add(area);
public FlowLayout( int p, int h, int v)
BorderLayout
ソース
setLayout(new BorderLayout(5,5));
Demo
コンポーネントを5つの区域(N,S,E,W,C)に分け
て配置します。
add(colorlist, BorderLayout.NORTH);
public BorderLayout(int h, int v)
ソース
add(textField, BorderLayout.CENTER);
add(button, BorderLayout.EAST);
public BorderLayout()
GridLayout
add(label, BorderLayout.WEST);
add(area, BorderLayout.SOUTH);
Demo
格子(行と列)に沿ってコンポーネントを配置し
ます。
public GridLayout()
public GridLayout(int r, int c, int h, int v)
setLayout(new GridLayout(3,4,2,2));
add(button);
……
add(area);
パネル
Panel
必要性:ために、FlowLauout()とかBorderLayout()とか
GridLayout()とかどれだけでも、各コンポーネントを正確な位
置に配置することが難しいから、異なる復数のパネルを使う。
Container クラス=> Panelクラス => Appletクラス
Panel(オブジェクト)を利用し
てコンポーネントをより複雑
にはいちすることができます。
private Panel panel1,panel2;
panel1 = new Panel();
panel1.setLayout(new BorderLayout(5, 5));
……
public Panel()
panel1.add(button, BorderLayout.NORTH);
……
panel2 = new Panel();
ソース
Demo
panel2.setLayout(new GridLayout(1, 5, 2, 2));
……
panel2.add(colorlist);
……
フレーム
Frame
Frame: タイトルバーと境界領域を持ったウィンドウで、
ユーザがリサイズすることができます。
Container クラス=> Windowクラス => Frameクラス
フレームのデフォルトレイア
ウトマネージャは
BorderLayoutです。
private Frame myFrame;
フレームのタ
イトル
…….
myFrame = new Frame("New Frame");
myFrame.setSize(300,100);
public Frame(String s)
ソース
Demo
myFrame.setVisible(true);
フレームの
サイズ
…….
フレームを
表示する
課題
• 1. 電卓のGUIを作成せよ。 ex1
• 2. 印刷機のGUIを作成せよ。 ex2
Note: 作成したGUIには機能を持たせる必要はない。