Java 什么是;这";在这个节目里是什么意思?

Java 什么是;这";在这个节目里是什么意思?,java,Java,我在写一个程序,然后我在一些网站上看到了这个,在这个代码中使用了this关键字,我想知道它的用途是什么,它可以处理一个Jbutton,或者JTextField,它可以使用this关键字显示消息,getSource()发生了什么 这是密码 import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; imp

我在写一个程序,然后我在一些网站上看到了这个,在这个代码中使用了
this
关键字,我想知道它的用途是什么,它可以处理一个Jbutton,或者JTextField,它可以使用this关键字显示消息,
getSource()
发生了什么

这是密码

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

public class TextPassWordEvent extends JFrame {

    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;
    private JPasswordField passwordField;
    private JButton button;

    public TextPassWordEvent(){
        super("Title");
        setLayout(new FlowLayout());

        textField1 = new JTextField(10);
        add(textField1);

        textField2 = new JTextField("Enter your Text Here");
        add(textField2);

        textField3 = new JTextField("Uneditable Text field");
        textField3.setEditable(false);
        add(textField3);

        passwordField = new JPasswordField("Password");
        add(passwordField);

        button = new JButton("Submit");
        add(button);

        TextHandler handler = new TextHandler();
        textField1.addActionListener(handler);
        textField2.addActionListener(handler);
        textField3.addActionListener(handler);
        passwordField.addActionListener(handler);
        button.addActionListener(handler);
    }

    private class TextHandler implements ActionListener{

        public void actionPerformed(ActionEvent event){
            JOptionPane.showMessageDialog(TextPassWordEvent.this, String.format("Message: %s",event.getActionCommand()));
        }
    }

}

始终是对对象当前实例的引用


在代码段中使用此指的是施工时的活动对象;即
TextPasswordEvent
类的一个实例

您正在查看一个内部类。在这个场景中,甚至有多个版本的
this


普通
这个
将是内部类(即TextHandler)的实例。如果需要引用包含类的实例,则必须使用类名限定它:
TextPassWordEvent。这表示您引用的是当前上下文

这意味着类TextHandler中的当前上下文是ActionListener


对于每个事件,我们都需要一个监听器来执行操作,因此在extPassWordEvent事件中,ActionListener是触发………..所需的监听器。

在java中,它指的是当前对象实例。
在上面的示例中,使用“this”的位置是在内部类中的某些代码中。如果此代码在没有任何上下文的情况下使用“this”,那么它将引用内部类的实例

Java提供了OuterClassName.this的表示法,作为引用该内部类在其中实例化的外部类实例的一种方式

因此,它只是引用TextPasswordEvent类的实例

TextPasswordEvent是一个容器,当调用showMessageDialogue时,您需要传递一个容器,在其中显示对话框,因此TextPasswordEvent。这表示将“传递TextPasswordEvent对象的实例”传递给showMessageDialogue方法。如果它没有使用限定,只是传递了“this”,那么它将传递一个对TextHandler内部类实例的引用,而这不是期望的行为

编辑:更多信息

TextHandler是实现ActionListener接口的内部类。在此接口中,有一个定义为actionPerformed的方法

外部类创建各种控件(按钮、文本字段等),然后创建TextHandler类的一个实例,并将其设置为这些控件上的操作侦听器。然后,当用户点击按钮或返回键(取决于控件)时,这些控件调用actionPerformed方法

在内部类的actionPerformed方法中,它显示一个对话框(showMessageDialogue)并传递两个参数—显示内部对话框的容器和显示其中的消息

它显示的消息包括传递的命令。这是通过调用传递给actionPerformed()方法的ActionEvent对象上的getActionCommand()来实现的。在用户完成操作(按下按钮、点击返回键等)后,控件在调用actionPerformed时创建并传递此ActionEvent对象

编辑2:

为另一个ActionListener添加新的内部类定义,该定义将仅添加到按钮组件:

private class MyButtonHandler implements ActionListener{

    public void actionPerformed(ActionEvent event){
        JOptionPane.showMessageDialog(TextPassWordEvent.this, "This only gets shown when the button gets pressed because I only added an instance of this action listener to button and none of the other components");
    }
}
然后返回TextPassWordEvent构造函数代码:

TextHandler handler = new TextHandler();
textField1.addActionListener(handler);
textField2.addActionListener(handler);
textField3.addActionListener(handler);
passwordField.addActionListener(handler);

// Create an instance of our button handler and add that to our button instead of the
// other handler.
MyButtonHandler buttonHandler = new MyButtonHandler();
button.addActionListener(buttonHandler);

如果我点击其中任何一个组件,它会返回它们的值吗?或者我现在关注的对象???或者它将作为我关注的对象的事件源?是的,三个组件将以某种方式响应。一条显示被调用事件的操作命令的消息。soo是上层类。这就像用一种非常粗糙的方式说getSource()?“是”
TextPassWordEvent。这是一个JPanel,在其上显示消息对话框。为什么是JPanel?如果我点击按钮呢?这意味着,如果我当前正在关注某个组件或与之交互,我按下它,或按下enter键,它将输出其动作命令,这些组件中的任何一个。编辑我的帖子来解释更多关于代码在做什么-你可能应该阅读Swing事件机制。但简而言之-是的,这是正确的用户962206-当用户与控件交互并按enter键时,消息对话框将显示动作命令,无论它是哪个组件。引用在actionEvent上创建事件调用getSource()的实际组件。然后,您可以将其与TextPasswordEvent.this.button、TextPasswordEvent.this.textField1等进行比较,以确定如果您想对其进行更多操作,将其转换为什么类型。(但是如果你想让不同的组件类型有不同的行为,你可能最好创建不同的ActionListener实现。在这种情况下,你能在这个例子中为我展示不同的实现或关于不同监听器的例子吗?比如Jbutton组件?与最初的问题有点偏离主题,但我已经编辑了我的回答显示这一点。是的,我指的是上层阶级,但我的问题是,如果我当前正在与这些组件中的任何一个进行交互,它将返回给我它们的actionCommand值??就像我单击按钮,或在文本字段中按enter键?因此,这指的是任何实例(组件)上面的类?我说的对吗?不,这总是指对象的实例,而不是对象内部的任何变量,你不叫这个。text你叫这个。button。text哦,我明白了!如果我点击JTextField并按enter,它将是这个。Textfield。text??或者如果我按“this.button.text”??