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した順番に画面左上から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.setForeground(Graphics.getColorOfName(Graphics.LIME));
|
これでラベルの色を変えています。
btn1.setBackground(Graphics.getColorOfName(Graphics.BLACK));
|
これでボタンの色を変えています。
利用不可状態にしています。パラメータをtrueにして呼び出すと利用可能状態に戻すことが出来ます。
clickCount = 0;
btn1.setLabel("BTN1");
btn1.setForeground(Graphics.getColorOfName(Graphics.BLACK));
btn1.setBackground(Graphics.getColorOfName(Graphics.WHITE));
btn1.setEnabled(true);
|
元の状態に戻しています。
以上でButtonの使い方の解説を終わります。