last modified: Feb./10th/2002
いままでは、一つの部品に対して一つのリスナーを登録していましたが、複数のリスナーを登録することができます。一つの部品に対して、複数のアクションを拾いたい場合は、一つの部品に対して、複数のリスナーを登録することが必要になります。
次のサンプルは、ボタンとラベルが配置してあり、ボタンには、 ActionListener と MouseListener が登録してあります。
このアプレットは、ブラウザが最小化(アイコン化)/別のページに移動/再起動/再読み込みして一時停止したときに、背景色が白に変わり、ボタンによって何度でも色が変えられます。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class MultiListener extends Applet {
private Button btnBlue;
EventHandler eh = new EventHandler();
private Label label;
//リスナー内部クラス
class EventHandler implements ActionListener, MouseListener {
//ActionListener インタフェースの実装
public void actionPerformed(ActionEvent e) {
MultiListener.this.setBackground(Color.blue);
}
//MouseListener インタフェースの実装
public void mouseEntered(MouseEvent e) {
label.setBackground(Color.blue);
label.setForeground(Color.white);
}
public void mouseExited(MouseEvent e) {
label.setForeground(Color.black);
label.setBackground(Color.white);
}
//インタフェースのメソッドは全て実装する必要がある
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
//アプレットの初期化
public void init() {
//部品の作成
btnBlue = new Button("blue");
label = new Label("Color");
//部品の配置/大きさ
btnBlue.setBounds(75, 30, 50, 20);
label.setBounds(75, 60, 50, 20);
//Label の修飾
label.setAlignment(Label.CENTER);
//部品の配置
this.setLayout(null);
this.setSize(200, 100);
this.add(btnBlue);
this.add(label);
//イベントリスナーの登録
btnBlue.addActionListener(eh);
btnBlue.addMouseListener(eh);
}
//アプレットの開始
public void start() {
this.setBackground(Color.white);
System.out.println("Start");
}
}
アプレット: MultiListener.class |