ボタンを作ろう
アクションイベント
GUIの部品で、もっとも頻繁に使用される要と言えばボタンです
ユーザー側から見ても、ボタンは直感的でわかりやすく、操作しやすいですね
ボタンをコンテナに追加する方法も、ラベルと同じです
ボタンの生成はjava.awt.Buttonクラスで行われます
コンストラクタは以下の二つです
public Button()
public Button( String label )
引数に何も指定しない場合は、ラベルなしのボタンになります
labelには、ボタンの上に表示される文字列を指定します
ボタンと前回のラベルの大きな違いはイベントです
ボタンは押されたらイベントが発生しなければ意味がありませんよね
イベントは、ボタンごとにaddActionListener()メソッドでリスナを追加する必要があります
また、イベントが発生しないようリスナを削除するにはremoveActionListener()を使用します
public synchronized void addActionListener( ActionListener l )
public synchronized void removeActionListener( ActionListener l )
l にはリスナを指定します
ここで新しくjava.awt.event.ActionListenerインターフェイスがでてきます
このインタフェイスはactionPreformed()メソッドを宣言しています
このメソッドはアクション(この場では、ボタンを押したら)が発生したら呼び出されます
public abstract void actionPerformed( ActionEvent e )
このメソッドは、引数でjava.awt.event.ActionEventクラスのオブジェクトを受け取ります
アクションの詳細情報は、このオブジェクトからメソッドで得ることができます
特別なことがないかぎり、ActionEventクラスを操作することはないでしょう
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App29.class" width="300"height="300">
</applet>
*/
public class App29 extends Applet implements ActionListener{
boolean bool = true;
public void init() {
setBackground(Color.white);
Button but = (Button)add(new Button("Kitty on your lap"));
but.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (bool) {
setBackground(Color.red);
this.bool = false;
}
else {
setBackground(Color.blue);
this.bool = true;
}
}
}
ボタンを押すと背景色の設定を変更します
一度押すと赤に、もう一度押すと青になり、この動作を繰り返します
アクションにはコマンド名と言うものがあります
コマンド名は、ボタンはデフォルトでボタンのラベルになっています
このコマンド名は、ActionEventクラスのオブジェクトからgetActionCommand()メソッドで得ます
public String getActionCommand()
このメソッドは、アクションに対するコマンド名を返します
このコマンド名は、コンポーネントのクラスで変更することができます
ButtonクラスにはsetActionCommand()メソッドが定義されています
public void setActionCommand( String command )
commandに、アクションイベントのコマンド名を設定します
この設定をしていない場合は、ボタンのラベルがActionEventのgetActionCommand()で返されます
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App30.class" width="300"height="300">
</applet>
*/
public class App30 extends Applet implements ActionListener{
Label l;
public void init() {
setBackground(Color.white);
Button but1 = (Button)add(new Button("Kitty on your lap"));
but1.addActionListener(this);
Button but2 = (Button)add(new Button("Card Captor Sakura"));
but2.addActionListener(this);
but2.setActionCommand("Back to your true shape");
l = (Label)add(new Label("---Action Command---"));
}
public void actionPerformed(ActionEvent e) {
l.setText(e.getActionCommand());
}
}
また、ラベル名を取得したり、変更したりすることも可能です
ラベルの取得にはgetLabel()メソッドを
ラベルの設定にはsetLabel()メソッドを使用します
public String getLabel()
public synchronized void setLabel( String label )
getLabel()は、現在のラベル名を返します
setLabel()のlabelには、設定するラベル名を指定します
ボタンで発生したアクションコマンド名を得ることもできます
現在設定されているコマンド名を得るにはgetActionCommand()メソッドを使用します
public String getActionCommand()
これは、設定されているアクションコマンドを返します
次のプログラムは、コンソールからアプレットビューワで実行してください
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
/* <applet code="test.class" width="300"height="300">
</applet>
*/
public class test extends Applet implements ActionListener{
Button but;
public void init() {
setBackground(Color.white);
but = (Button)add(new Button("Kitty on your lap"));
but.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
System.out.println("コマンド = " + but.getActionCommand());
System.out.println("ラベル = " + but.getLabel());
System.out.print("ラベルを変更します、ラベル名を入力してください>");
BufferedReader fp = new BufferedReader(new InputStreamReader(System.in));
try {but.setLabel(fp.readLine());}
catch (IOException err) { }
System.out.println("ボタンのラベルを変更しました");
}
}
ボタンを押すとコンソールに現在のラベル名とコマンド名が表示され
さらに入力要求がでます
ここで値を入力すると、今度はその文字列がラベル名になります