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,请仔细回答,谢谢)
你说的好,但还是没有解决我关于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");
}
}
A.addActionListener(new ActionListener() {
//在中间实现那个要实现的方法
})
你这个用的是匿名内部类是吧?但是我已经用JP实现了 ActionListener这个接口了不是么 我再用一个匿名内部类再实现一个ActionListener会不会出现问题?你说的指针我很赞成,不知你能否再仔细解释一下?谢谢!
使用内部类不会有问题的,我以前就是这样写的。你试试吧。。。。
换成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("你好!");
}
}
测试过的
饿。。你说的不对 不是A 如果说可能的话 也应该是JP(也并不是单纯的JP)。 是JP实现了 ActionListener这个接口
本回答被提问者采纳