6.Event/EventListener

 GUIコンポーネントで発生したボタンクリックなどをイベントとよび、発生したコンポーネントをイベントソースと呼びます。イベントの種類とイベントソースは次のようなものがあります。 ①イベントの種類 イベントソース  アクション:イベント ラベル   フォーカスをほかのGUIコンポーネントに移す:FocusEvent   ラベルをクリックする:ActionEvent   マウスで操作する。:MouseEvent ボタン   フォーカスをほかのGUIコンポーネントに移す:FocusEvent   ボタンをクリックする:ActionEvent   マウスで操作する。:MouseEvent テキストフィールド   を押す:ActionEvent   フォーカスをほかのGUIコンポーネントに移す:FocusEvent   インプットメソッドを使ってテキスト入力する:InputMethodEvent   キーボードから入力する。:KeyEvent   マウスで操作する。:MouseEvent   テキストを変更する。:TextEvent テキストエリア   フォーカスをほかのGUIコンポーネントに移す:FocusEvent   インプットメソッドを使ってテキスト入力する:InputMethodEvent   キーボードから入力する。:KeyEvent   マウスで操作する。:MouseEvent   テキストを変更する。:TextEvent

イベントイベントリスナー
ActionEventActionListener
FoucusEventFocusListener
InputMethodEventInputMethodListener
KeyEventKeyListener
MouseEventMouseListener
MouseEventMouseMotionListener
TextEventTextListener
②イベント処理メソッド
イベントリスナーイベント処理メソッドイベントタイプアクション
ActionListeneractionPerformedACTION_PERFORMEDボタン、ラベルがクリックされた
FocusListener focusGained FOCUS_GAINED フォーカスを得た
FocusListener focusLost FOCUS_LOST フォーカスを失った
InputMethodListener caretPositionChangedCARET_POSITION_CHANGED キャレットの位置が変わった
InputMethodListener inputMethodTextChanged INPUT_METHOD_TEXT_CHANGEDインプットメソッドテキストが変更された
KeyListener keyPressed KEY_PRESSED キーが押された
KeyListener keyReleased KEY_RELEASED キーが話された
KeyListener keyTyped KEY_TYPED キーがタイプされた
MouseListener mouseClicked MOUSE_CLICKED マウスボタンがクリックされた
MouseListener mouseEntered MOUSE_ENTERED マウスカーソンが乗った
MouseListener mouseExited MOUSE_EXITED マウスカーソルが出た
MouseListener mousePressed MOUSE_PRESSED マウスボタンが押された
MouseListener mouseReleased MOUSE_RELEASED マウスボタンが離された
MouseMotionListener mouseDragged MOUSE_DRAGGED マウスがドラッグされた
MouseMotionListener mouseMoved MOUSE_MOVED マウスカーソルが移動
TextListener textValueChanged TEXT_VALUE_CHANGED テキストが変更された
③イベントリスナークラス(ActionListenerインタフェースの実装) ActionListenerインタフェースを実装したイベントリスナークラスの構造は次の図のとおりです。  イベントソースからActionListenerインタフェースを実装したイベントリスナークラスの例です。
      
package sample009;							
							
import java.awt.Container;							
							
import javax.swing.JButton;							
import javax.swing.JFrame;							
							
public class ButtonEvent {							
							
	public static void main(String[] args) {						
		// TODO 自動生成されたメソッド・スタブ					
		JFrame f = new JFrame("buttonEvent1");					
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);					
		Container c = f.getContentPane();					
		JButton b = new JButton("C l i c k");					
		// イベントリスナーのインスタンスを作る					
		myListener func = new myListener();					
							
		// ボタンにイベントリスナーを登録する					
		b.addActionListener(ml);					
							
		c.add(b);					
		f.pack();					
		f.setVisible(true);					
	}						
}							
package sample009;					
					
import java.awt.event.ActionEvent;					
import java.awt.event.ActionListener;					
					
class myListener implements ActionListener {					
	// イベント処理メソッドの定義 イベントリスナーインタフェースの抽象メソッドをオーバーライド				
	public void actionPerformed(ActionEvent a) {				
		System.out.println("ボタンがクリックされました");			
	}				
}					
④イベントリスナークラス(ActionListenerインタフェースの実装) 複数のボタンがある場合にボタンを押すと判別のための文字列を表示するプログラムです。
package sample003;				
				
import java.awt.BorderLayout;				
import java.awt.Container;				
				
import javax.swing.JButton;				
import javax.swing.JFrame;				
				
public class sample003 {				
	public static void main(String args[]) {
        //メソッド定義
		JFrame f = new JFrame("buttonEvent2");		
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);		
		Container c = f.getContentPane();		
		// ボタン作成		
		JButton a = new JButton("BUTTON A");		
		JButton b = new JButton("BUTTON B");		
				
		//インスタンスの作成		
		myListener func = new myListener();		
				
		// ボタンAにイベントリスナーを登録する		
		a.addActionListener(func);		
		b.addActionListener(func);		
				
		c.add(a, BorderLayout.WEST);		
		c.add(b, BorderLayout.EAST);		
		f.pack();		
		f.setVisible(true);		
	}			
}				
package sample003;											
											
import java.awt.event.ActionEvent;											
import java.awt.event.ActionListener;											
											
class myListener implements ActionListener {											
	public void actionPerformed(ActionEvent A) {										
		// イベントの起こったGUIコンポーネントを取り出す									
		String bname = A.getActionCommand();									
		System.out.println(bname + "がクリックされました");									
	}										
											
}											
⑤アダプタークラス アダプタークラスは複数のイベント処理メソッドを持つリスナーインタフェースを実装して、そのインタフェースのすべてのイベント処理メソッド本体を空で定義したクラスであり、 使用する場合は、アダプタークラスを継承したリスナークラスを作成します。 イベントソースとリスナーインタフェースを実装したアダプタークラスを継承したイベントリスナークラスの構造は次の図のとおりです。
				
package sample005;								
								
import java.awt.BorderLayout;								
import java.awt.Container;								
								
import javax.swing.JButton;								
import javax.swing.JFrame;								
import javax.swing.JTextField;								
								
class sample005 {								
	// フィールド宣言							
	static JTextField T_Field;							
	static JButton A;							
	static JButton B;							
	static JButton C;							
	static JButton D;							
								
	public static void main(String args[]) {							
		JFrame f = new JFrame("ButtonEvent");						
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);						
		Container c = f.getContentPane();						
								
		T_Field = new JTextField("アルファベット");						
		A = new JButton("A BUTTON");						
		B = new JButton("B BUTTON");						
		C = new JButton("C BUTTON");						
		D = new JButton("D BUTTON");						
								
		myListener func = new myListener();						
		A.addMouseListener(func);						
		B.addMouseListener(func);						
		C.addMouseListener(func);						
		D.addMouseListener(func);						
								
		c.add(A, BorderLayout.NORTH);						
		c.add(B, BorderLayout.WEST);						
		c.add(C, BorderLayout.EAST);						
		c.add(D, BorderLayout.SOUTH);						
		c.add(T_Field, BorderLayout.CENTER);						
								
		f.setSize(350,150);						
		f.setVisible(true);						
	}							
}								
package sample005;					
					
import java.awt.event.MouseAdapter;					
import java.awt.event.MouseEvent;					
					
class myListener extends MouseAdapter {					
					
	// 使用するメソッドだけをオーバーライド				
public void mousePressed(MouseEvent F){					
if(F.getSource()==sample005.A){					
sample005.T_Field.setText("Aのボタンを押しました");					
}else if(F.getSource()==sample005.B){					
sample005.T_Field.setText("Bのボタンを押しました");					
}else if(F.getSource()==sample005.C){					
	sample005.T_Field.setText("Cのボタンを押しました");				
}else if(F.getSource()==sample005.D){sample005.T_Field.setText("Cのボタンを押しました");}					
else{					
	}				
}					
	public void mouseReleased(MouseEvent F) {				
		sample005.T_Field.setText("アルファベット");			
	}									
}