• 検索結果がありません。

アプレットⅢ

N/A
N/A
Protected

Academic year: 2021

シェア "アプレットⅢ"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

アプレットⅢ

JV③ □ アプレット(GUI アプリケーション、AWT、Swing) □ アプレット(GUI コンポーネント、GUI コントロールクラス) □ アプレット(AWT コンポーネントの表示) □ アプレット(レイアウト) □ アプレット(GUI コンポーネントのイベント処理) 今回の課題項目 □ アプレット(GUI コンポーネント) 今回の重点項目

(2)

■ GUI アプリケーションの概要 ■

Java で GUI プログラムするには Swing と AWT と謂う 2 つのパッケージ存在する。 Java で GUI する時に利用する 2 つのパッケージ

Swing javax.swing パッケージ

AWT(Abstract Window Toolkit) java.awt パッケージ

夫々れ上表の様にSwing は、javax.swing パッケージ、AWT は java.awt パッケージで定義されて居る。 Java1.1 迄は、Swing は標準では搭載されて居らず、Swing は AWT に変わる新しい GUI 用のパッケー ジと謂う事に成る。

パッケージの特徴 長所 短所

Swing 高機能でOS に依存しない 動作的に重く、アプレットで標準では利用出来ない

AWT OS に依存する

Swing は新しいパッケージで有る為、未だ、ブラウザで対応出来て居ない(JavaPlug-in をインストー ルして居れば実行可能)。更に、Swing は、AWT に比べ可成り重い。此れは、AWT が OS の API をラ ップした物に対し、Swing は Java 独自で総てを定義して居る為で有る。此れに依り重くは成るが、OS

に依存しないコントロールが可能に成る。孰れを使用するかは、高機能性を求めるならSwing、誰もが

使えるアプレットを作成するならAWT と謂う様に、プログラマが実行環境に適した物を選択する事に

成る。Swing は look&feel の変更も可能で、UNIX、WINDOW、JAVA 等での外観を、違う OS でも表 示する事も出来る。 GUI コントロールクラス AWT Swing ウィンドウ Frame Jframe ダイアログウィンドウ Dialog jDialog ボタン Button Jbutton、JToggleButton ラジオボタン JradioButton チェックボックス CheckBox JcheckBox 1 行テキストボックス TextField JtextField、JPasswordField 複数行テキストボックス TextArea JtextArea スクロールバー Scrollbar JscrollBar メニューバー MenuBar JmenuBar リストボックス List Jlist ラベル Label Jlabel コンボボックス Choice JcomboBox プログレスバー JProgressBar ツールバー JtoolBar ツリーコントロール Jtree パネル Scrollpanel、Panel、

Canvas Jscrollpane、JPanel、JtabbedPanel、JsplitPanel、JtextPanel

ポップアップメニュー PupupMenu JpupupMenu

スライダーコントロール Jslider

テーブル Jtable

※ GUI コントロールは総て java.awt パッケージの Component クラスのサブクラスで有る。

(3)

■ 各種AWT コンポーネントの表示 ■

各種AWT(Abstract Window Toolkit)コンポーネントの表示方法を、下記に示す。 ■ Label

此のクラスは、単一行の読み取り専用テキストを表示する。テキストを変更するにはアプリケーション を使用し、ユーザが直接編集する事は出来ない。

import java.applet.*; import java.awt.*;

public class awtLabel extends Applet {

public void init() {

Label myLabel1 =new Label("ラベル1");

Label myLabel2 =new Label("ラベル2", Label.CENTER); Label myLabel3 =new Label("ラベル3", Label.RIGHT); myLabel1.setBackground(Color.red); myLabel2.setBackground(Color.green); myLabel3.setBackground(Color.blue); this.add(myLabel1); this.add(myLabel2); this.add(myLabel3); } } ■ List 此のクラスは、テキスト項目のスクロールリストをユーザに対して表示する。リストは、単一、又は、 複数の項目が選択する事が出来る様に設定する事が出来る。 import java.applet.*; import java.awt.*;

public class awtList extends Applet {

public void init() {

List myList = new List(4, false); myList.add("Mercury"); myList.add("Venus"); myList.add("Earth"); myList.add("JavaSoft"); myList.add("Mars"); myList.add("Jupiter"); myList.add("Saturn"); myList.add("Uranus"); myList.add("Neptune"); myList.add("Pluto"); this.add(myList); } }

(4)

■ Button

此のクラスは、ラベル付きボタンを生成する。アプリケーションで、ボタンが押された時にアクション が実行される様にする事が出来る。

import java.applet.*; import java.awt.*;

public class awtButton extends Applet {

public void init() {

Button myButton = new Button("ボタン"); this.add(myButton); } } ■ Checkbox チェックボックスは、オン(true)又は、オフ(false)の孰れかの状態を取る事が出来る。チェックボ ックスをクリックすると、其の状態をオンからオフに、又は、オフからオンに変更する事が出来る。 import java.applet.*; import java.awt.*;

public class awtCheckbox extends Applet {

public void init() {

Checkbox myCheckbox1 = new Checkbox("Male"); Checkbox myCheckbox2 = new Checkbox("Female"); this.add(myCheckbox1); this.add(myCheckbox2); } } ■ Scrollbar 此のクラスは、スクロールバーを実現する。スクロールバーは、ユーザが値の範囲から値を選択する事 が出来る様にする為の便利な手段を提供する。 import java.applet.*; import java.awt.*;

public class awtScrollbar extends Applet {

public void init() {

Scrollbar myScrollbar = new Scrollbar(Scrollbar.HORIZONTAL); this.add(myScrollbar);

} }

(5)

■ Choice

此のクラスは、選択範囲のポップアップメニューを表す。現在の選択範囲は、メニューのタイトルと仕 て表示される。

import java.applet.*; import java.awt.*;

public class awtChoice extends Applet {

public void init() {

Choice myChoice = new Choice(); myChoice.add("日本"); myChoice.add("ドイツ"); myChoice.add("イタリア"); myChoice.add("アメリカ"); this.add(myChoice); } } ■ TextArea 此のクラスは、テキストを表示する複数行領域を実現する。編集可能に設定する事も、読み取り専用に 設定する事も出来る。 import java.applet.*; import java.awt.*;

public class awtTextArea extends Applet {

public void init() {

TextArea myTextArea = new TextArea("Hello", 4, 10); this.add(myTextArea); } } ■ TextField 此のクラスは、1行のテキストの編集を行える様にするテキスト領域を実現する。 import java.applet.*; import java.awt.*;

public class awtTextField extends Applet {

public void init() {

TextField myTextField = new TextField("Hello", 20); this.add(myTextField);

} }

(6)

■ Canvas

此のクラスは、アプリケーションが描画したり、ユーザからの入力イベントをトラップしたりする事が 出来る空白の矩形の画面領域を実現する。

import java.awt.*; import java.applet.*;

public class awtCanvas extends Applet {

DrawCanvas canvas = new DrawCanvas(); //アプレットの初期化

public void init() {

this.add(canvas); }

public void paint(Graphics g) {

canvas.repaint(); //描画 }

}

class DrawCanvas extends Canvas { //コンストラクタ public DrawCanvas() { super(); this.setBackground(Color.cyan); this.setSize(50, 50); // 適当なキャンパスサイズを確保 } //描画

public void paint(Graphics gc) { gc.drawOval(10,10, 20, 30); } } ■ MenuBar( Frame ) 此のクラスは、フレームに結合されるメニューバーの概念をカプセル化するクラスで有る。メニューバ ーをFrame オブジェクトに関係付けるには、フレームの setMenuBar メソッドを呼び出す。 import java.applet.*; import java.awt.*;

public class awtMenu extends Applet {

public void init() {

awtFrame fm = new awtFrame("Menu Test"); fm.init();

fm.show(); }

(7)

class awtFrame extends Frame { public awtFrame(String t) { setTitle(t); resize(400,200); }

public void init() {

MenuBar myMenubar = new MenuBar(); Menu myFile = new Menu("ファイル"); Menu myEdit = new Menu("編集");

MenuItem myItem = new MenuItem("終わらない"); myFile.add(myItem); myMenubar.add(myFile); myMenubar.add(myEdit); setMenuBar(myMenubar); } } ■ Dialog( Frame ) 此のクラスは、タイトルとボーダを持つトップレベルのウィンドウで有り、ユーザが何等かの入力を行 う為に通常使用される。 import java.applet.*; import java.awt.*;

public class awtDialog extends Applet {

public void init() {

myDialog d=new myDialog(new Frame()); d.init();

} }

class myDialog extends Dialog {

public myDialog(Frame parent) {

super(parent,"MyDialog",true); }

public void init () { setSize(300,150); setVisible(true); } } アプレット上に直接設置する事は 出来ず、フレームを表示する必要 が有る。 猶、イベント設定を仕て居ない為 フレームを閉じるには、強制終了 する。 アプレット上に直接設置する事は 出来ず、フレームを表示する必要 が有る。 猶、イベント設定を仕て居ない為 フレームを閉じるには、強制終了 する。

(8)

■ Panel を利用したレイアウト ■

Java の場合、レイアウトマネージャをパネル(ウィンドウ等)に設定すると、追加した GUI 部品を Java が 適当に配置する。併し、アプレットは大きさを自由に設定する事が出来る為、座標と大きさを独自に設定した 方が思い通りのレイアウトを行う事が出来る。猶、ビジュアルにレイアウトを行う事の出来る RAD ツール (CodeWarrior 等)を所持して居る場合は、レイアウトを簡単に行う事が出来る。 ■ レイアウトの種類 基本的なレイアウトは、下記の通りで有る。猶、此等は、AWT(java.awt パッケージ)で定義されて 居るレイアウトで、Swing では、色々とレイアウトが追加されて居る。 FlowLayout(デフォルト) 横書の文章の様に部品を順に並べる。 BorderLayout 部品を上、下、右、左、中央の5箇所に並べる。 GridLayout 格子状に部品を並べる。 CardLayout カード状に重ねて並べる。 上記以外にも、GridBagLayout と謂う HTML のテーブルの様なレイアウトが有る。更に、此等のレイ アウトをネスティング(入れ子)する事も出来る。 ■ レイアウトの設定 レイアウトを設定する書式は、下記の通りで有る。

setLayout( new レイアウトマネージャ名( ) ); // 例:setLayout( new BorderLayout( ) ); 上記の、setLayout メソッドは、java.awt パッケージで定義されて居る Container クラスのメソッドで 有り、Applet クラスは Container クラスを継承して居るので、其の儘、レイアウト枠を指定する事が 可能で有る。猶、アプレットでは、デフォルトでFlowLayout 枠が設定されるが、setLayout メソッド の引数にnull を指定するとレイアウト枠を無効にする事も出来る。

亦、コンポーネントをレイアウト枠に追加するには、同じく Container クラスのメソッドで有る add メソッドを使用する(例:add( new Button( "実行" ) ); )。

(9)

■ BorderLayout の利用例 java.awt パッケージで定義されて居る BorderLayout クラスは、上端、下端、右端、左端、及び、中央 の5箇所の領域に収まる様に、コンポーネントの整列とサイズ変更を行い、コンテナに配置する。各領 域は、コンポーネントを最大1 個宛含む事が出来る。 各領域は、BorderLayout クラスで定義されて居る下記の定数に依り識別される。 NORTH(上端)、SOUTH(下端)、EAST(右端)、WEST(左端)、CENTER(中央) 猶、文字列 "North"、"South"、"West"、"Center" を使用する事も出来る。亦、場所を指定しない場合 は、CENTER を選択したと看做される。因みに、同じ場所に2度コンポーネントを追加した場合、後 で追加した方が適用される。 import java.applet.*; import java.awt.*;

public class UseBorderLayout extends Applet { public void init() {

setLayout(new BorderLayout());

add(new Button("North"), BorderLayout.NORTH); add(new Button("South"), "South");

add(new Button("West"), "West"); add(new Button("西"), "West"); add(new Button("Center")); } } ■ レイアウト枠のネスティング(入れ子) レイアウト枠の中に、更にレイアウト枠を配置するネスティング(入れ子)を行う事も出来る。猶、Panel クラスもContainer クラスを継承して居るので、レイアウトが可能で有る。 import java.applet.*; import java.awt.*;

public class LayoutNest extends Applet { public void init() {

setLayout(new BorderLayout()); Panel p = new Panel();

p.setLayout(new GridLayout(2, 3));

for(int i=1;i < 7; i++) { p.add(new Button("" + i)); } add(p, BorderLayout.NORTH);

add(new Button("West"), BorderLayout.WEST); add(new Button("East"), BorderLayout.EAST); add(new Button("Center"));

} }

(10)

■ AWT コンポーネントの使用 ■

下記のコードを、テキストエディタで入力し、awtPushButton.java と謂うファイル名で保存した後、 コンパイルして、HTML ファイルから呼び出し、ブラウザで表示する。

import java.applet.*; import java.awt.*;

public class awtPushButton extends Applet {

public Button red_button, green_button; public Canvas map;

public Panel button_panel;

public void init() {

map = new Canvas(); map.resize(100, 100);

map.setBackground(Color.red); add(map);

button_panel = new Panel(); button_panel.resize(100, 100);

button_panel.setLayout(new BorderLayout()); red_button = new Button("Red");

red_button.setForeground(Color.red);

red_button.setFont(new Font("TimesRoman", Font.PLAIN, 36)); green_button = new Button("Green");

green_button.setFont(new Font("TimesRoman", Font.PLAIN, 36)); green_button.setForeground(Color.green); button_panel.add("North", red_button); button_panel.add("South", green_button); add(button_panel); } // コンポーネントに何等かのアクションが有った場合、自動で呼ばれる。 public boolean action(Event ev, Object obj)

{ if (ev.target == red_button) map.setBackground(Color.red); else map.setBackground(Color.green); return true; } } ▼ AWT コンポーネントは画面に表示される時、其の位置は自動で決定される。其の為、表示させ度い 位置に表示させる事が困難に成る。然う謂う時は、Panel を使用する(ドット単位で指定する事も 出来る)。

(11)

■ キーボードからの入力 ■

下記のコードを、テキストエディタで入力し、KeyInput.java と謂うファイル名で保存した後、コンパ イルして、HTML ファイルから呼び出し、ブラウザで表示する。

import java.applet.*; import java.awt.*;

public class KeyInput extends Applet {

TextField text,text2; int x = 100;

int y = 100;

public void init() {

text = new TextField("" + x, 4); add(text);

text2 = new TextField("" + y, 4); add(text2);

}

public void paint(Graphics g) {

g.drawRect(x, y, 100, 100); }

public boolean action(Event ev, Object obj) {

if (ev.target == text)

x = Integer.parseInt((String)obj); else if (ev.target == text2)

y = Integer.parseInt((String)obj); repaint(); return true; } } ▼ キー入力には AWT コンポーネントの TextField を使用する。 ▼ action メソッドは、コンポーネントに何等かのアクション(イベント発生)が有った場合に自動で 呼ばれるメソッドで、java.awt パッケージで定義されて居る Component クラスのメソッド有り、 同じくjava.awt パッケージで定義されて居る Event クラスを引数と仕て与える。 猶、JDK 1.1 以降では、推奨されて居ないが、簡単なイベント処理を行うのに、用いる事が出来る。

参照

関連したドキュメント

 そして,我が国の通説は,租税回避を上記 のとおり定義した上で,租税回避がなされた

[r]

  BT 1982) 。年ず占~は、

それゆえ︑規則制定手続を継続するためには︑委員会は︑今

この届出者欄には、住所及び氏名を記載の上、押印又は署名のいずれかを選択す

復旧と復興の定義(2006 年全国自治体調査から).

記念して 12 月 5 日に「集まれ!NEW さぽらんて」を開催。オープ ニングでは、ドネーション(寄付)パーティーにエントリーした

[r]