ActionListenerの書き方いろいろ
プログラムの書き方には、色々なスタイルがあるのですが、
どれが正しいと言うよりは、単に「好み」の問題です。
毎度、イガジーです。
Buttonを押した時の処理の「ActionListener」の書き方も
3通りほどあり、どれを使うか、は人それぞれです。
(書き方の違いだけで、動作は同じです。)
次に簡単な例を書いてみました。
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Listeners {
Frame f0;
Label lbl=new Label();
Listeners() {
f0=new Frame();
f0.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
Panel p=new Panel();
Button btn1=new Button("addAL");
btn1.addActionListener(new MyAL());
p.add(btn1);
Button btn2=new Button("no Name");
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// System.out.println("no Name");
lbl.setText("no Name");
}
});
p.add(btn2);
Button btn3=new MyButton("extend");
p.add(btn3);
lbl.setFont(new Font(Font.SANS_SERIF, Font.PLAIN,24));
lbl.setAlignment(Label.CENTER);
f0.add(lbl,BorderLayout.CENTER);
f0.add(p,BorderLayout.SOUTH);
f0.setSize(360,160);
f0.setVisible(true);
}
public static void main(String[] args) {
new Listeners();
}
class MyAL implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
// System.out.println("add ActionListenr");
lbl.setText("Add ActionListener");
}
}
class MyButton extends Button implements ActionListener {
private static final long serialVersionUID = 1L;
MyButton(String lb) {
super(lb);
this.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent arg0) {
//System.out.println("extends Button");
lbl.setText("extends");
}
}
}
最初のbtn1が、ActionListenerを含むクラスを明示的に作る書き方です。
2番目のbtn2は、クラス名を書く所に直接その内容を書き下したもので
無名クラスと呼ばれます。
3番目は、ActionListenerを内包するクラスを作ってしまうものです。
これらは、ActionListenerだけでなく、ItemListenerや
WindowListenerなど、Listenerと名のついているものに対して
同じ書き方ができます。
感覚的な話になりますが、処理の短いものは無名クラスにしてしまう事が
多いと思います。
※ 3パターンも覚えたくないという方は、最初の形だけ覚えれば十分です。
※※ 覚えるというより、こういうのはコピペするとか、Eclipseに補完させれば良いのです。
この記事へのコメントはこちら