“这个”在这个程序中意味着什么?

我正在编写一个程序,然后我在一些在此代码中使用this关键字的网站上看到了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())); } } } 

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

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

所以它只是引用TextPasswordEvent类的实例。

TextPasswordEvent是一个容器,当调用showMessageDialogue时,您需要传递一个容器,在该容器中将显示对话框,因此TextPasswordEvent.this将“将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); 

你正在寻找内心阶级。 在这种情况下,甚至有几个版本。

this是内部类的实例(即TextHandler)。 如果需要引用包含类的实例,则必须使用类名来限定它: TextPassWordEvent.this

在代码段中使用this是指构造时的活动对象; 即TextPasswordEvent类的实例

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

这意味着你指的是当前的背景。

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

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