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

GUI 部品を使ったプログラム例

ドキュメント内 progj-text.dvi (ページ 35-39)

第 3 章 Java による GUI の制御 33

3.2 GUI 部品を使ったプログラム例

3.2 GUI 部品を使ったプログラム例

実習

それでは,

GUI

部品の使い方を具体的に見ていきましょう。サンプルと して用意した

sample03.java

を観察した後,

sample04.java

を使って 簡単な改造を施してみます。

3.2.1 GUI

部品使用の基本形

AWT

には,前述のようにボタンやチェックボックス,テキストフィールドなど最小限 必要な

GUI

部品が備わっています。

sample03.java

は,そのほとんどを網羅した形で組 み立ててあります。

まず,これをそのままコンパイルしたら,ブラウザで確認してみてください。

確認できたら,次のような基本形を参照して,プログラムの内容を解読してみましょう。

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*; // イベント処理のために追加 public void クラス名 extends Applet

implements リスナー { // 必要なリスナーを用意 // インスタンス変数を定義(クラス内で共有するのでメソッドの外で定義)

GUI部品クラス名 GUI部品名 ;

public void init() { // 初期化メソッドで GUI 部品を生成・取り付け GUI部品名 = new GUI部品クラス名(初期化パラメータ) ;

add(GUI部品名) ; // add()で部品を画面に配置。デフォルトでは左から順に GUI部品名.リスナー登録メソッド(オブザーバ) ; // オブザーバは通常 this }

public void イベント処理メソッド( イベントクラス イベント変数 ) { // 調査したいGUI部品からのイベントかどうかの検査

if( イベント変数.getSource() == GUI部品名 ) { 部品からの情報の取得/部品の状態の変更など }

}

… }

3.1

に,

GUI

部品と各メソッドとの対応を整理しておきましたので,これも活用して みてください。

3.2.2

マウスのイベント処理の基本形

マウスを用いた場合の処理の基本形を以下のようになります。上記の各種

GUI

部品と の併用はもちろん可能です。

3.1: GUI

部品のイベントの種類とその処理メソッド

クラス(部品) リスナー/リスナー登録 イベント処理/イベントクラス Button ActionListener actionPerformed

TextField addActionListener ActionEvent TextArea

Choice ItemListener itemStateChanged

Checkbox addItemListener ItemEvent

Scrollbar AdjustmentListener adjustmentValueChanged addAdjustmentListener AdjustmentEvent

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*; // イベント処理のために追加 public void クラス名 extends Applet

implements MouseListener, MouseMotionListener { public void init() {

addMouseListener(オブザーバ) ; // オブザーバは通常 this addMouseMotionListener(オブザーバ) ;

}

// 以下の5つのイベント処理メソッドは MouseListener に対応 public void mousePressed(MouseEvent e) {

【ボタンが押された時の処理】

}

public void mouseReleased(MouseEvent e) {

【ボタンが離された時の処理】

}

public void mouseClicked(MouseEvent e) {

【ボタンがクリックされた時の処理】

}

public void mouseEntered(MouseEvent e) {

【ボタンがパネルに入った時の処理】

}

public void mouseExited(MouseEvent e) {

【ボタンがパネルから出た時の処理】

}

// 以下の2つのイベント処理メソッドは MouseMotionListener に対応 public void mouseMoved(MouseEvent e){

【マウスが動いた時の処理】

}

public void mouseDragged(MouseEvent e) {

【マウスがドラッグされた時の処理】

}

3.2. GUI

部品を使ったプログラム例

37

… }

3.2

に,マウスイベントと各メソッドとの対応を整理しておきましたので,これも活 用してみてください。

3.2:

マウスのイベントの種類とその処理メソッド リスナー/リスナー登録 種類 イベント処理メソッド

MouseListener ボタンを押した mousePressed

addMouseListner ボタンを離した mouseReleased クリックした mouseClicked パネルに入った mouseEntered パネルから出た mouseExited MouseMotionListener 動いた mouseMoved addMouseMotionListener ドラッグした mouseDragged

マウスイベントのクラスはすべてMouseEventで統一されています。また,GUI 品のように個々の部品ではなく,指定されたパネルやキャンバスなど全体に割り付 けます。さらに,同じリスナーのグループでは,たとえ何もしなくてもユーザ側の メソッドとして定義しておく必要があります。

3.2.3 sample04.java

の実行と改変

それでは,おおよその感じがつかめたら,機能をしぼった

sample04.java

を使って理 解度を確認してみましょう。例によって,コンパイルして動作を確認したら,以下のよう な拡張を行ってみてください。

背景色の変更

肥満度の判定結果によって,パネルを色分けしてみましょう。パネルを塗るには,

paint()

メソッドを追加して,

fillRect()

を使う必要があります。イベント処理のメソッドから

paint()

を直接呼ぶことはできませんので,代わりに

repaint()

を呼ぶのがポイントで す。判定結果をどう伝えるかは,いろいろな方法が考えられますが,以下のヒントを参照 に工夫してみてください。

色変更の指示は引数では渡せない(repaintに余分な引数を指示できない)ので,共有のColor クラスの変数を用意しておきましょう。たとえば,Color bgColor = Color.lightGray ; のようにしておきます。

リスナー内部で,判定結果に応じた色情報を,上で定義しておいたColorクラスの変数に 記憶させるのが簡単でしょう。また,判定直後に画面を書き換えさせるためにrepaint() ; を追加しておきます。

paintメソッドでは,判定結果に応じて設定された色情報を用いて,setColorで描画色を 変更し,fillRectで,原点を起点に画面全体に四角形を描きます。四角形の大きさは,適当 に大きな数値を使っても構いませんが,getSize().widthで画面の幅,getSize().height で画面の高さが得られるので,このことを利用してfillRectの引数に直接与えることもで きます。

BMIの計算

余力のある方は,

BMI

の計算方法を調べて,この値を表示できるように改造してみてく ださい。

BMI

による標準体重の範囲は,おおよそ

20

24

です(

22

がちょうどよい)。

さらに余力のある方は,グラフで判定結果を表現してみましょう。

ここでちょっと休憩

ドキュメント内 progj-text.dvi (ページ 35-39)