JAVA初学者关于监听器部分的疑惑
我给某个按钮A1创建了监听器然后问题是在这里要实现监听功能该类就得继承ActionListener该类继承了它是不是这个类就注册了监听器了只要绑定监听器的按钮此类的监听器...
我给某个按钮A1创建了监听器 然后问题是在这里
要实现监听功能 该类就得继承ActionListener
该类继承了它 是不是这个类就注册了监听器了 只要绑定监听器的按钮此类的监听器 都会去实现这个按钮的事件
我的意思时说 注册监听器是给按钮注册了 还是给类注册了
例如Button button1=new Button();
button1.addActionListener(this);
this指的是监听器吗 this所指的对象时按钮呢 还是这个按钮所在的类
button1.addActionListener(this);的意思是不是给次按钮所在的类注册监听然后把此按钮绑定在这个功能上呢 还是给光给按钮注册了监听器并实现绑定啊 展开
要实现监听功能 该类就得继承ActionListener
该类继承了它 是不是这个类就注册了监听器了 只要绑定监听器的按钮此类的监听器 都会去实现这个按钮的事件
我的意思时说 注册监听器是给按钮注册了 还是给类注册了
例如Button button1=new Button();
button1.addActionListener(this);
this指的是监听器吗 this所指的对象时按钮呢 还是这个按钮所在的类
button1.addActionListener(this);的意思是不是给次按钮所在的类注册监听然后把此按钮绑定在这个功能上呢 还是给光给按钮注册了监听器并实现绑定啊 展开
展开全部
…………这个感觉上好难
不过给点我的观点,实际上 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了
展开全部
1.继承了不等于就注册了,否则,后面都不用add方法去注册啦;
2.是按钮注册了监听器,而不是类注册了监听器;
3.button1.addActionListener(this),这里的this指的是其所在的容器为this,也就是“本类”;
4.this,指所在的类;
关于继承ActionListener和注册等含义,我本人是这样理解的:继承了ActionListener类,该类当中有ActionPerformed方法,我们可以重写该方法,当被注册的按钮被按下时,就触发该方法。
2.是按钮注册了监听器,而不是类注册了监听器;
3.button1.addActionListener(this),这里的this指的是其所在的容器为this,也就是“本类”;
4.this,指所在的类;
关于继承ActionListener和注册等含义,我本人是这样理解的:继承了ActionListener类,该类当中有ActionPerformed方法,我们可以重写该方法,当被注册的按钮被按下时,就触发该方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二楼很强大,我学习了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询