我正在编写一个程序,然后我在某个网站上看到这个代码中使用 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”的地方是在内部类中的某些代码中。如果这段代码在没有任何上下文的情况下使用了“this”,那么它将引用内部类的实例。
Java 提供了 OuterClassName.this 的表示法,作为引用内部类实例化所在的外部类实例的一种方式。
所以它只是引用 TextPasswordEvent 类的实例。
TextPasswordEvent 是一个容器,在调用 showMessageDialogue 时,您需要传递一个将在其中显示对话框的容器,因此 TextPasswordEvent.this 表示“将 TextPasswordEvent 对象的实例传递给 showMessageDialogue 方法”。如果它不使用限定并且只是传递“this”,它将传递对 TextHandler 内部类实例的引用,而不是所需的行为。
编辑:更多信息
TextHandler 是一个实现 ActionListener 接口(interface)的内部类。在这个接口(interface)中定义了一个名为 actionPerformed 的方法。
外部类正在创建各种控件(按钮、文本字段等),然后创建 TextHandler 类的一个实例并将其设置为这些控件上的 Action 监听器。当用户点击按钮或返回键(取决于控件)时,这些控件会调用 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);
关于java - "this"在这个程序中是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8221782/