addActionListener(this) 中的this问题
publicclassJPextendsJFrameimplementsActionListener{JPanelpanel1=newJPanel();............
public class JP extends JFrame implements ActionListener{
JPanel panel1=new JPanel();
.........................
panel2.add(A=new JButton("7"));
................................
A.addActionListener(this);
..........
}
1.这个this是调用当前对象?
2.如果我不想用“this” 可以换成什么?(这个是为了更深入的了解this,请仔细回答,谢谢) 展开
JPanel panel1=new JPanel();
.........................
panel2.add(A=new JButton("7"));
................................
A.addActionListener(this);
..........
}
1.这个this是调用当前对象?
2.如果我不想用“this” 可以换成什么?(这个是为了更深入的了解this,请仔细回答,谢谢) 展开
4个回答
展开全部
this是当前对象,先不谈this可以换成什么,先谈谈这里的this干什么用的。
首先A.addActionListener(this);的作用就是给A加个监听器,所谓监听器其实就是一个普通类,只不过这个类有一个特别的方法而已,也就是ActionListener要求必须实现的方法。
当A发生事件的时候会调用监听器中定义的那个方法。
所以this在这里的作用就是提供了一个可以被调用的方法而已,你当然可以不用this用其他类的对象,只要这个对象实现了ActionListener接口,也就是写了ActionListener规定的方法。
一般我们开发时会专门写一些处理事件的类,比如你可以定义一个AButtonActionListener,专门处理A发生的事件,这样的话就可以:
A.addActionListener(new AButtonActionListener() );
当然,上面只是个例子,具体如何用要看你想做什么了。
首先A.addActionListener(this);的作用就是给A加个监听器,所谓监听器其实就是一个普通类,只不过这个类有一个特别的方法而已,也就是ActionListener要求必须实现的方法。
当A发生事件的时候会调用监听器中定义的那个方法。
所以this在这里的作用就是提供了一个可以被调用的方法而已,你当然可以不用this用其他类的对象,只要这个对象实现了ActionListener接口,也就是写了ActionListener规定的方法。
一般我们开发时会专门写一些处理事件的类,比如你可以定义一个AButtonActionListener,专门处理A发生的事件,这样的话就可以:
A.addActionListener(new AButtonActionListener() );
当然,上面只是个例子,具体如何用要看你想做什么了。
追问
你说的好,但还是没有解决我关于this的疑问、、就我这个程序来说 他到底能换成什么呢 不是new JP() 我觉得二楼说的指针有道理,这个指针指向一个我还没有创建的JP对象,所以这里应该只能用this我个人认为,不知你是否同意?
追答
我刚才不是说了么?希望你仔细看看:
你当然可以不用this用其他 类 的对象,只要这个对象实现了ActionListener接口,也就是写了ActionListener规定的方法。一般我们开发时会专门写一些处理事件的类,比如你可以定义一个AButtonActionListener,专门处理A发生的事件。
我实在搞不明白为什么你说这里只能用this,除非你不想改代码结构,也就是不想创建一个专门处理A事件的类。
我也听不明白你的话“ 我觉得二楼说的指针有道理,这个指针指向一个我还没有创建的JP对象”,this“指向一个我还没有创建的JP对象”??那还真搞笑了,this本身就是指向自己,注意这个自己是自己这个对象,而不仅仅是JP类,也就是调用A.addActionListener(this)所依赖的那个对象。
你如果还不理解this的话,我建议你先好好学学Java的类与对象。
我怀疑解释半天你还是不明白,给你代码吧,这是我测试过的,没有错误!:
//===============窗体===========
public class JP extends JFrame {
public JP() {
this.setSize(400, 300);
JPanel panel = new JPanel();
JButton a = new JButton("7");
a.addActionListener(new AButtonActionListener());
panel.add(a);
this.add(panel);
}
public static void main(String[] args) {
JP jp = new JP();
jp.setVisible(true);
}
}
//======事件处理类=======================
public class AButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("JButton");
}
}
微测检测5.10
2023-07-11 广告
2023-07-11 广告
IEC62133与en62133的区别如下:1. 认证机构不同:IEC62133是国际的标准,它以国际通用的标准进行生产;而en62133采用的是欧盟的标准,它使用欧盟的生产需求进行生产。2. 宗旨不同:IEC62133的宗旨是促进电气、电...
点击进入详情页
本回答由微测检测5.10提供
展开全部
(1)是当前对象。也就是JP这个类的一个实例。
你这个A不能在下面这行掉用,因为是一个局部变量,应该这样写才行,JButton = A=new JButton("7"); panel2.add(A);A.addActionListener(this);
(2)如果不想用this,可以这样写。A.addActionListener(new ActionListener() {
//在中间实现那个要实现的方法
})
其实this,要说用也用得也不是很多,因为基本都隐藏了。就是说就是在每个调用的方法钱没有具体的对象,其实前面就是隐藏了一个this指针了,也就是指向当前对象的指针。
你这个A不能在下面这行掉用,因为是一个局部变量,应该这样写才行,JButton = A=new JButton("7"); panel2.add(A);A.addActionListener(this);
(2)如果不想用this,可以这样写。A.addActionListener(new ActionListener() {
//在中间实现那个要实现的方法
})
其实this,要说用也用得也不是很多,因为基本都隐藏了。就是说就是在每个调用的方法钱没有具体的对象,其实前面就是隐藏了一个this指针了,也就是指向当前对象的指针。
追问
A.addActionListener(new ActionListener() {
//在中间实现那个要实现的方法
})
你这个用的是匿名内部类是吧?但是我已经用JP实现了 ActionListener这个接口了不是么 我再用一个匿名内部类再实现一个ActionListener会不会出现问题?你说的指针我很赞成,不知你能否再仔细解释一下?谢谢!
追答
使用内部类不会有问题的,我以前就是这样写的。你试试吧。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
panel2.add(JButton A=new JButton("7"));//
A.addActionListener(this);
给按钮添加监听器,这里this指的是当前类JP,应为JP实现了 ActionListener接口,所以可以直接添加此类,若不想使用this,可换为new JP()
A.addActionListener(this);
给按钮添加监听器,这里this指的是当前类JP,应为JP实现了 ActionListener接口,所以可以直接添加此类,若不想使用this,可换为new JP()
追问
换成new JP()是不对的,并不是这么简单。。。二楼说的指针有道理,这个指针指向一个我还没有创建的JP对象,所以这里应该只能用this我个人认为,不知你是否同意?
追答
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JP extends JFrame implements ActionListener {
public static void main(String[] args) {
JP jp = new JP();
JPanel panel = new JPanel();
JButton A = new JButton("7");
panel.add(A);
A.addActionListener(new JP());
jp.setContentPane(panel);
jp.pack();
jp.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("你好!");
}
}
测试过的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
this就是指的对象本身嘛,换成A试试
追问
饿。。你说的不对 不是A 如果说可能的话 也应该是JP(也并不是单纯的JP)。 是JP实现了 ActionListener这个接口
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询