import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import javax.swing.*;
import java.awt.event.*;
public class CursorClass implements ActionListener{
JButton btn;
JFrame frame;
public static void main(String[] args) {
CursorClass cc = new CursorClass();
cc.launchButton();
}
public void launchButton(){
frame = new JFrame("Main Window");
frame.setSize(400, 400);
btn = new JButton("Close Main Window");
btn.setSize(100,100);
btn.addActionListener(this); // <--------
JPanel pnl = new JPanel();
pnl.add(btn);
frame.add(pnl);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event){
System.out.print("Exiting..");
System.exit(0);
}
}
正如您在launchButton
方法中看到的那样...... btn.addActionListener(this)
函数..
this
是什么?指的是?
它是指整个CursorClass
吗?
我在这里有点困惑。我无法理解我传递给按钮对象的内容。我知道我已将ActionListener添加到它..现在按钮(它是事件源)将在单击时响应按钮,但在该方法中添加this
..我无法看到{ {1}}是..我知道最常见的答案是this
指的是当前对象等。
但是我需要一些更具体的内容..我的课程是否被认为是this
?
答案 0 :(得分:3)
您的CursorClass
实施ActionListener
。 this
指的是CursorClass
的当前实例。本质上,代码将本身(“this”对象)添加为动作侦听器。
它引用CursorClass
实例的原因是因为它是从launchButton
调用的,这是CursorClass
中的方法。
答案 1 :(得分:2)
this
完全引用在那里创建的实例cc
:
CursorClass cc = new CursorClass();
在实例化之后,您调用:
cc.launchButton();
因此,在您的示例中,this
为cc
。
addActionListener
的方法签名为public void addActionListener(ActionListener l)
,因此您必须传递ActionListener
的实例,正如您在类定义中所看到的那样:
public class CursorClass implements ActionListener{
CursorClass是一个有效的类,因为它实现了ActionListener。
您在此处可以看到的是observer pattern,其中通知方法是已实施的方法public void actionPerformed(ActionEvent e){...}
答案 2 :(得分:1)
您班级的对象被视为this
。
假设您有两个CursorClass对象,A&amp;乙
因此,对象A中的this
将引用对象A&amp;对象B中的this
将引用对象B.
答案 3 :(得分:0)
是的,java和其他面向对象语言中的this
指的是当前的类。
所以在你的情况下这= = CursorClass
。
答案 4 :(得分:0)
最简单的答案是它引用了这个类的对象,或者是一个扩展这个类的类,它调用了方法(launchButton()
)。