gpt4 book ai didi

java - 将 "this"作为方法参数传递 - 说明

转载 作者:行者123 更新时间:2023-12-01 07:04:08 28 4
gpt4 key购买 nike

在完成第一组 Java 类(class)后,我目前正在学习 Java Swing 类(class)。在本课中,我们正在研究我们一直在学习的不同组件(按钮、工具栏等)之间的通信。问题是,“this”作为 addActionListener() 方法的方法参数传递。这是有效的,但是,我不完全明白它在做什么。我做了一些关于“this”的研究,发现“this”关键字最流行的用法是在具有相同名称的变量的构造函数中。我找不到适合我的情况的例子。通过查看下面的代码,我将解释我理解的代码部分。

import java.awt.FlowLayout; Implements FlowLayout class
import java.awt.event.ActionEvent; //Imports ActionEvent Class
import java.awt.event.ActionListener; //Imports ActionListener Interface
import javax.swing.JButton; //Imports JButton class
import javax.swing.JPanel; //Imports JPanel class


public class Toolbar extends JPanel implements ActionListener {
// ^ Inherits JPanel & Implements ActionListener Interface

private JButton helloButton; //Creating variable of JButton type
private JButton goodbyeButton; //Creating variable of JButton type


public Toolbar() { //Constructor

helloButton = new JButton("Hello"); //Creates new JButton
goodbyeButton = new JButton("Goodbye"); //Creates new JButton

helloButton.addActionListener(this); //Question 1
goodbyeButton.addActionListener(this); //Question 1

setLayout(new FlowLayout(FlowLayout.LEFT)); //Sets Layout Type to Left


add(helloButton); //Adds button to FlowLayout (Layout Manager) Interface
add(goodbyeButton); //Adds button to FlowLayout (Layout Manager) Interface

}

public void setTextPanel(TextPanel textPanel) {
//No Usage Yet!
}

public void actionPerformed(ActionEvent arg0) { //Unimplemented Method from ActionListener
System.out.println("A button was clicked"); //Prints after button is clicked.

}

}

问题 1: 正如您所看到的,在创建两个 JButton 后,我们添加了一个 addActionListener() 方法,以便检测按钮是否已被单击。如果它被单击,那么它将执行在 ActionPerformed 中键入的任何代码,该代码是从 ActionListener 接口(interface)实现的。在之前的类(class)中,我们采用了不同的方法来使按钮响应单击。它做了同样的事情,但看起来像这样:

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

textPanel.appendText("Hello\n");

}


});

在此示例中,我们只是将文本从自定义组件附加到文本区域,而不是打印到控制台来测试 actionListener() 是否有效。在本文正上方的代码中,我们正在使用一个匿名类。

所以...问题是,当“this”作为方法参数传递到 addActionListener() 中时,它到底在做什么?我知道它正在将“单击了一个按钮”打印到控制台,但我不明白“this”正在做什么以将按钮已被单击发送到 actionPerformed() 背后的逻辑。

应用程序如下所示:

The application running, and printing to console!

这是正在运行的应用程序,按钮在单击后已打印到控制台。我认为这可能会让您更好地了解我正在做什么。我希望有人能够阐明这一点,并解释“这个”在这种情况下是如何运作的。谢谢!

最佳答案

this 代表您的类的当前实例。

Toolbar类实现了ActionListener接口(interface),这意味着它提供了方法actionPerformed的实现。

因此,helloButton.addActionListener(this); 成为可能(尝试从类声明中删除implements ActionListener,代码将无法编译)。

也就是说,Toolbar实例可以被视为ActionListener对象,并且可以传递给button.addActionListener。

使用时

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
}
}

即时创建了 ActionListener 接口(interface)的新实现。这种实现称为匿名

这两种解决方案都是有效的。如果 actionPerformed 中的代码无法从其他地方使用,请首选匿名解决方案。

关于java - 将 "this"作为方法参数传递 - 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com