button1.addActionListener;这句话什么意思
1个回答
展开全部
…………这个感觉上好难
不过给点我的观点,实际上 java的按钮机制就是经典的观察者模式
ActionListener是一个接口……
你是去实现这个接口 ,但是 仅仅实现了不管用,得注册 注册的时候就是button1.addActionListener(this);这一句
ActionListener接口的源代码是
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
很惊讶 就这一句…… 我们知道 如果一个类实现了一个接口 就必须对这接口指明的方法进行实现
正常情况下 例如我们有一个JFram(举个例子)里面有个button 那么JFrame实现了 public void actionPerformed(ActionEvent e)这个方法
这个方法中的函数就是按下按钮后的动作,而button1.addActionListener(this);表示注册 一旦注册了才会去调用你实现的actionPerformed方法
其实很简单 就是button对象中有一个List集合作为ActionListener的引用,那么当你调用addActionListener(this)就把你这个JFrame的引用塞到了list中,我们知道 你实现了ActionListener那么你自己的JFrame就是一个ActionListener了 那么当你按下button1的时候,就会去查找这个list最后调用你的actionPerformed方法
当然这只是一种写法,因为如果按照上面的方式写代码 你必须去判断是哪个按钮……这个很烦人如果按钮很多就没有办法
我记得当年用JBuilder的时候 建立一个事件会自动的生成一段代码,具体的代码如下
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Boddy extends JFrame {
JButton button1 = new JButton();
JButton button2 = new JButton();
public static void main(String[] args) {
Boddy boddy = new Boddy();
}
public Boddy() {
try {
Init();
} catch (Exception e) {
e.printStackTrace();
}
}
private void Init() throws Exception {
button1.addActionListener(new Boddy_jButton1_actionAdapter(this));
button1.setEnabled(true);
button2.addActionListener(new Boddy_jButton2_actionAdapter(this));
button2.setEnabled(true);
this.getContentPane().add(button1);
this.getContentPane().add(button2);
this.getContentPane().setLayout(null);
this.setVisible(true);
}
public void jButton1_actionPerformed(ActionEvent eb) {
//按钮1动作
}
public void jButton2_actionPerformed(ActionEvent ea) {
//按钮2的动作
}
}
class Boddy_jButton1_actionAdapter implements ActionListener {
private Boddy adaptee;
Boddy_jButton1_actionAdapter(Boddy adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent eb) {
adaptee.jButton1_actionPerformed(eb);
}
}
class Boddy_jButton2_actionAdapter implements ActionListener {
private Boddy adaptee;
Boddy_jButton2_actionAdapter(Boddy adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent ea) {
adaptee.jButton2_actionPerformed(ea);
}
}
好长时间不写swing了但是总之一句话,button1.addActionListener(this);的意思是告诉button1 this有一个方法,可以被button1调用 当按钮被你按下的时候,就会去找这个注册的对象的相应的类
其实注册的什么绑定什么都是概念 很炫的东西,但实际上 都是对象中某个方法的调用
再举个例子就拿上面那代码来说,有两个button对象 button1和button2 一个jframe对象 body
注册的时候我们把Boddy_jButton1_actionAdapter这个类的一个对象注册了进去。
实际上,这个Boddy_jButton1_actionAdapter对象存到了button的list集合中,当我按下这个button的时候,他会循环这个list看里面有东西没,有东西的话就拿出来,然后转化成ActionListener 类型的对象,(就是上转型)
然后调用这个对象的actionPerformed方法就ok了
不过给点我的观点,实际上 java的按钮机制就是经典的观察者模式
ActionListener是一个接口……
你是去实现这个接口 ,但是 仅仅实现了不管用,得注册 注册的时候就是button1.addActionListener(this);这一句
ActionListener接口的源代码是
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
很惊讶 就这一句…… 我们知道 如果一个类实现了一个接口 就必须对这接口指明的方法进行实现
正常情况下 例如我们有一个JFram(举个例子)里面有个button 那么JFrame实现了 public void actionPerformed(ActionEvent e)这个方法
这个方法中的函数就是按下按钮后的动作,而button1.addActionListener(this);表示注册 一旦注册了才会去调用你实现的actionPerformed方法
其实很简单 就是button对象中有一个List集合作为ActionListener的引用,那么当你调用addActionListener(this)就把你这个JFrame的引用塞到了list中,我们知道 你实现了ActionListener那么你自己的JFrame就是一个ActionListener了 那么当你按下button1的时候,就会去查找这个list最后调用你的actionPerformed方法
当然这只是一种写法,因为如果按照上面的方式写代码 你必须去判断是哪个按钮……这个很烦人如果按钮很多就没有办法
我记得当年用JBuilder的时候 建立一个事件会自动的生成一段代码,具体的代码如下
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Boddy extends JFrame {
JButton button1 = new JButton();
JButton button2 = new JButton();
public static void main(String[] args) {
Boddy boddy = new Boddy();
}
public Boddy() {
try {
Init();
} catch (Exception e) {
e.printStackTrace();
}
}
private void Init() throws Exception {
button1.addActionListener(new Boddy_jButton1_actionAdapter(this));
button1.setEnabled(true);
button2.addActionListener(new Boddy_jButton2_actionAdapter(this));
button2.setEnabled(true);
this.getContentPane().add(button1);
this.getContentPane().add(button2);
this.getContentPane().setLayout(null);
this.setVisible(true);
}
public void jButton1_actionPerformed(ActionEvent eb) {
//按钮1动作
}
public void jButton2_actionPerformed(ActionEvent ea) {
//按钮2的动作
}
}
class Boddy_jButton1_actionAdapter implements ActionListener {
private Boddy adaptee;
Boddy_jButton1_actionAdapter(Boddy adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent eb) {
adaptee.jButton1_actionPerformed(eb);
}
}
class Boddy_jButton2_actionAdapter implements ActionListener {
private Boddy adaptee;
Boddy_jButton2_actionAdapter(Boddy adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent ea) {
adaptee.jButton2_actionPerformed(ea);
}
}
好长时间不写swing了但是总之一句话,button1.addActionListener(this);的意思是告诉button1 this有一个方法,可以被button1调用 当按钮被你按下的时候,就会去找这个注册的对象的相应的类
其实注册的什么绑定什么都是概念 很炫的东西,但实际上 都是对象中某个方法的调用
再举个例子就拿上面那代码来说,有两个button对象 button1和button2 一个jframe对象 body
注册的时候我们把Boddy_jButton1_actionAdapter这个类的一个对象注册了进去。
实际上,这个Boddy_jButton1_actionAdapter对象存到了button的list集合中,当我按下这个button的时候,他会循环这个list看里面有东西没,有东西的话就拿出来,然后转化成ActionListener 类型的对象,(就是上转型)
然后调用这个对象的actionPerformed方法就ok了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询