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

时间:2011-11-22 03:56:12

标签: java

我正在编写一个程序,然后我在一些使用此代码中的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()));
        }
    }

}

5 个答案:

答案 0 :(得分:6)

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

普通this将是内部类的实例(即TextHandler)。如果需要引用包含类的实例,则必须使用类名TextPassWordEvent.this对其进行限定。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在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);

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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