トップソースライブラリiアプリ雑誌/書籍紹介
目次
トップ
iアプリ
 Tips / Sample
 │├最初のiアプリ
 │├Hello, World
 │├テキストに色をつけ...
 │├いろいろな描画機...
 │├画像を読み込んで...
 │├ Buttonコンポーネ...
 │└Labelコンポーネン...
 リンク集

項目
Buttonコンポーネントを使う
概要
ソースコード
スクリーンショット
解説


Buttonコンポーネントを使う
最終更新日:2002/06/10

概要

今回は、Buttonコンポーネントを使ってみます。このコンポーネントは画面上にボタンを設置するときに使うもので、ラベル文字を変更したり、文字色を変えたりすることも出来ます。

利用されるclass/interface
Button [ setLabel(String) setEnabled(boolean)]
Component [ setBackground(int) setForeground(int)]
ComponentListener [ setComponentListener(ComponentListener) ]
Panel [ add(Component) ]
IApplication [ start() ]

ソースコード

import com.nttdocomo.ui.*; import com.nttdocomo.io.*; class SamplePanel extends Panel implements ComponentListener{ Button btn1; Button btn2; boolean btnEnabled = true; int clickCount = 0; public SamplePanel() { setComponentListener(this); btn1 = new Button("BTN1"); btn2 = new Button("BTN2"); add(btn1); add(btn2); } public void componentAction(Component src, int type, int param) { if(src == btn1){ if(type == BUTTON_PRESSED){ clickCount++; switch(clickCount){ case 1: btn1.setLabel("click"); break; case 2: btn1.setForeground(Graphics.getColorOfName(Graphics.LIME)); break; case 3: btn1.setBackground(Graphics.getColorOfName(Graphics.BLACK)); break; case 4: btn1.setEnabled(false); break; } } }else if(src == btn2){ if(type == BUTTON_PRESSED){ clickCount = 0; btn1.setLabel("BTN1"); btn1.setForeground(Graphics.getColorOfName(Graphics.BLACK)); btn1.setBackground(Graphics.getColorOfName(Graphics.WHITE)); btn1.setEnabled(true); } } } } public class SampleApp extends IApplication{ public void start() { Display.setCurrent(new SamplePanel()); } }

スクリーンショット

ふたつのボタンを画面上に配置しています。

解説

以前と大きく異なる点があります。それはCanvasではなくPanelを使っていることです。

両者は、目的に応じて使い分けます。CanvasはGraphics classなどを使って細かな画像などを描画したいときに、Panelはボタンやエデットボックスなどを画面に配置したいときに、それぞれ利用します。
class SamplePanel extends Panel implements ComponentListener{
では、Panelを継承するだけでなく、ComponentListenerもimplementsしています。単にButtonを表示するだけならComponentListenerをimplementsする必要はなく、Componentのイベント(ボタンがクリックされたなど)を捕まえる場合にのみimplementsします。

SamplePanelのコンストラクタ内で
setComponentListener(this);

として、イベントのリスナーオブジェクトとして自分自身を登録しています。こうすることによってイベントが発生するたびに、componentActionが呼び出されます。
btn1 = new Button("BTN1"); btn2 = new Button("BTN2");

とすることによってBTN1、BTN2というラベルを持つボタンを生成します。しかしこの時点ではまだ画面上に現れず、
add(btn1); add(btn2);

とすることによって初めて画面上にボタンが配置されます。通常addした順番に画面左上からComponentが配置されていきます。
public void componentAction(Component src, int type, int param)

ComponentListenerをイベントリスナーとして登録しましたので、Component由来のイベントが発生すると、このメソッドが呼び出されます。

第1パラメータが呼び出し元のComponent、第2パラメータがイベントの種類、第三パラメータがイベントの補足情報です。

ボタンがクリックされた場合、第2パラメータはComponentListener.BUTTON_PRESSEDとなります。

このサンプルでは、btn1がクリックされた場合、1回目が「ラベルの文字列を変える」、2回目が「ラベルの文字色を変える」、3回目が「ボタンの色を変える」、4回目が「ボタンを利用不可状態にする」という処理を行っています。btn2がクリックされた場合は、btn1を最初の状態に戻す処理を行っています。
btn1.setLabel("click");

こうすることによって、ボタンのラベルが変わります。ラベルの文字数が変わった場合の動作は、機種依存だそうです。
btn1.setForeground(Graphics.getColorOfName(Graphics.LIME));

これでラベルの色を変えています。
btn1.setBackground(Graphics.getColorOfName(Graphics.BLACK));

これでボタンの色を変えています。
btn1.setEnabled(false);

利用不可状態にしています。パラメータをtrueにして呼び出すと利用可能状態に戻すことが出来ます。
clickCount = 0; btn1.setLabel("BTN1"); btn1.setForeground(Graphics.getColorOfName(Graphics.BLACK)); btn1.setBackground(Graphics.getColorOfName(Graphics.WHITE)); btn1.setEnabled(true);

元の状態に戻しています。

以上でButtonの使い方の解説を終わります。

リンク集自作ソフトウェブゲーム