0

我正在尝试使用以下代码制作井字游戏板。我不明白什么

button.addActionListener(this);

正在做什么以及为什么this在那里使用。

package guicollection;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DrawTicTacToe extends GUIcollection
        implements ActionListener {

    private JButton button;
    private JPanel pane1;

    void drawTicTacToe() {

        DrawTicTacToe frame = new DrawTicTacToe();
        frame.setSize(400, 300);
        frame.createGUI();
        frame.setVisible(true);
    }

    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Container window = getContentPane();
        window.setLayout(new FlowLayout());

        pane1 = new JPanel();

        pane1.setPreferredSize(new Dimension(300, 200));
        pane1.setBackground(Color.yellow);
        window.add(pane1);

        button = new JButton("Prss me");
        window.add(button);
        **button.addActionListener(this);**

    }

    public void actionPerformed(ActionEvent event) {
        Graphics paper = pane1.getGraphics();
        paper.drawLine(90, 30, 90, 120);
        paper.drawLine(135, 30, 135, 120);
        paper.drawLine(60, 60, 165, 60);
        paper.drawLine(60, 90, 165, 90);


    }

}

为什么我不能this用 actionPerformed 替换?

4

4 回答 4

0

http://www.java2s.com/Code/JavaAPI/javax.swing/JButtonaddActionListenerActionListeneract.htm

在提出问题之前,请务必阅读文档。

JButton.addActionListener(ActionListener act)需要一个 ActionListener 类型的参数,actionPerformed是一个方法集合,不是正确的类型。this是当前对象,它属于 DrawTicTacToe、GUIcolletion 和 ActionListener 类型(可能还有更多,取决于它们的超类是什么)。

于 2012-12-06T18:05:51.073 回答
0

它将您的 DrawTicTacToe 类的当前实例注册为该按钮的侦听器。单击按钮时,将调用您的 actionPerformed 方法。

于 2012-12-06T18:07:39.973 回答
0

这里的“this”指的是由 DrawTicTacToe 类的当前实例实现的 ActionListener 接口。这意味着通过这行代码,我们已经将 ActionListener 与按钮绑定,以便每当按钮发生特定事件时,其 actionPerformed 方法将是叫

于 2012-12-06T18:08:03.453 回答
0

有时一个方法需要引用调用它的对象。为此,Java 定义了 this关键字。this可以在任何方法中使用来引用当前对象。也就是说,始终是对调用该方法的对象的引用。您可以在任何允许引用当前类类型的对象的地方使用它。

在您的情况下,指的是 DrawTicTacToe 类对象。所以

 button.addActionListener(this);

表示此 ActionListener 的动作可以在 DrawTicTacToe 中的此类中找到

于 2012-12-06T18:15:03.810 回答