初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
Adapterクラスの利用
今まで私が作成したイベントは全てMouseListenerなどのリスナークラスをインタフェースとして実装するやり方でした!
しかし、そのほかにAdapterクラスを実装する方法もあります。
ここでは少しAdapterクラスについて解説します。
Adapterクラスの特徴
リスナークラスを実装する方法は関係する全てのイベントメソッドをオーバーライドしなければいけません。
Adapterクラスを実装する方法は必要なイベントメソッドだけを記述するだけでいいのです。
したがってプログラムがシンプルに書くことができます。
ではサンプルプログラムで確認していきます。
サンプルプログラム(AppletSample44.java)
//java.appletパッケージをimport宣言 //Graphicsクラスはawtパッケージに属しているのでawtパッケージもimport宣言
import java.applet.*; import java.awt.*; import java.awt.event.*; //Appletクラスを継承 public class AppletSample44 extends Applet implements MouseListener, MouseMotionListener { int x_1, y_1, x_2, y_2; int w, h; public void init(){ //アプレットの背景色を指定
setBackground(new Color(255, 255, 255));
addMouseListener(this); addMouseMotionListener(this); } //イベントリスナー
public void mousePressed(MouseEvent e){
x_1 = e.getX(); y_1 = e.getY(); }
public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseDragged(MouseEvent e){ x_2 = e.getX(); y_2 = e.getY(); w = x_2 - x_1; h = y_2 - y_1;
repaint();
}
public void mouseMoved(MouseEvent e){}
public void paint(Graphics g){ g.drawRect(x_1, y_1, w, h);
} }
プログラムをコピーする場合すべて選択をクリックしてください。
HTMLの作成(AppletSample44.html)
<html> <head> <title>アプレット</title> </head> <body>
<h3>マウスをドラッグしてください</h3> <applet code="AppletSample44.class" width="350" height="300"></applet> </body> </html>
プログラムをコピーする場合すべて選択をクリックしてください。
サンプルプログラム(AppletSample44_1.java)
//Adapterクラスの利用したプログラム
//java.appletパッケージをimport宣言 //Graphicsクラスはawtパッケージに属しているのでawtパッケージもimport宣言
import java.applet.*; import java.awt.*; import java.awt.event.*; //Appletクラスを継承 public class AppletSample44_1 extends Applet{ int x_1, y_1, x_2, y_2; int w, h; public void init(){ //アプレットの背景色を指定
setBackground(new Color(255, 255, 255));
addMouseListener(new MouseListener44_1()); addMouseMotionListener(new MouseMotionListener44_1()); } public void paint(Graphics g){ g.drawRect(x_1, y_1, w, h);
} //MouseAdapterクラスを継承するクラス
class MouseListener44_1 extends MouseAdapter{
public void mousePressed(MouseEvent e){
x_1 = e.getX(); y_1 = e.getY(); } } //MouseMotionAdapterクラスを継承するクラス class MouseMotionListener44_1 extends MouseMotionAdapter{ public void mouseDragged(MouseEvent e){ x_2 = e.getX(); y_2 = e.getY(); w = x_2 - x_1; h = y_2 - y_1;
repaint();
} } }
プログラムをコピーする場合すべて選択をクリックしてください。
HTMLの作成(AppletSample44_1.html)
<html> <head> <title>アプレット</title> </head> <body>
<h3>マウスをドラッグしてください</h3> <applet code="AppletSample44_1.class" width="350" height="300"></applet> </body> </html>
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
AppletSample44.javaの方はListenerインタフェースを実装する方法ですが
AppletSample44_1.javaのほうは Adapter クラスを継承しています。
AppletSample44_1.javaの方を見てください。
AppletSample44とMouseListener44_1とMouseMotionListener44_1の3つクラスを作成しています。
Javaの場合は多重継承ができないからそれぞれが、Appletクラス、MouseAdapterクラス、
MouseMotionAdapterクラスを継承しています。
また、 MouseListener44_1とMouseMotionListener44_1はAppletSample44クラスの内部クラスになっています。
次にイベントリスナーに登録しなければいけないのですが今までは
addMouseListener(this);
addMouseMotionListener(this);
の様に記述していましたがそれは今までは自分のクラス内で登録していたからです。
しかし今回はイベント処理メソッドはMouseListener44_1とMouseMotionListener44_1
内から呼び出さなければいけません。
したがって以下のように記述しているのです。
addMouseListener(new MouseListener44_1());
addMouseMotionListener(new MouseMotionListener44_1());
Adapterクラスの大きな特徴は必要なイベントメソッドだけを記述するだけでいいのです。
したがって
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
は記述しないでいいのです。
もちろん上記2つのプログラムは同じ結果になります。