1
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该方法.. 我无法看到是什么this.. 我知道最常见的答案是this指当前对象等。但我需要更具体的内容。我写的这个类是否被认为是this

4

5 回答 5

3

你的CursorClass工具ActionListenerthis指的是 的当前实例CursorClass。本质上,代码将自身(“this”对象)添加为动作监听器。

它引用 的实例的原因CursorClass是因为它是从 调用的launchButton,它是CursorClass.

于 2013-05-10T21:55:23.453 回答
2

this,正如在您的代码中执行的那样,完全是指cc在那里创建的实例:

CursorClass cc = new CursorClass();

在该实例化之后,您调用:

cc.launchButton();

所以,在你的例子中,thiscc

addActionListeneris的方法签名public void addActionListener(ActionListener l),因此您必须传递 的实例ActionListener,并且您可以在类定义中看到:

public class CursorClass implements ActionListener{

CursorClass 是一个有效的类,因为它实现了 ActionListener。

您在这里看到的是观察者模式,其中通知方法是已实现的方法public void actionPerformed(ActionEvent e){...}

于 2013-05-10T22:06:07.947 回答
1

你的类的对象被认为是this.

假设您有两个 CursorClass 对象,A 和 B。

因此,this在对象 A 中将引用对象 Athis而在对象 B 中将引用对象 B。

于 2013-05-10T21:56:35.593 回答
0

是的,this在 java 和其他面向对象的语言中是指当前类。

所以在你的情况下这个 == CursorClass

于 2013-05-10T21:55:29.483 回答
0

最简单的答案是它指的是这个类的对象,或者是一个扩展这个类的类,称为方法(launchButton())。

于 2013-05-11T01:24:11.957 回答