複数のリスナー

last modified: Feb./10th/2002

いままでは、一つの部品に対して一つのリスナーを登録していましたが、複数のリスナーを登録することができます。一つの部品に対して、複数のアクションを拾いたい場合は、一つの部品に対して、複数のリスナーを登録することが必要になります。

サンプル

次のサンプルは、ボタンとラベルが配置してあり、ボタンには、 ActionListenerMouseListener が登録してあります。

このアプレットは、ブラウザが最小化(アイコン化)/別のページに移動/再起動/再読み込みして一時停止したときに、背景色が白に変わり、ボタンによって何度でも色が変えられます。

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


Copyright © 2001 SUGAI, Manabu. All Rights Reserved.