簡體   English   中英

“這個”在這個程序中意味着什么?

[英]What does “this” mean in this program?

我正在編寫一個程序,然后我在一些在此代碼中使用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()));
        }
    }

}

你正在尋找內心階級。 在這種情況下,甚至有幾個版本的this

this是內部類的實例(即TextHandler)。 如果需要引用包含類的實例,則必須使用類名TextPassWordEvent.this進行限定: TextPassWordEvent.this

在代碼段中使用this是指構造時的活動對象; TextPasswordEvent類的實例

在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類中的當前上下文是ActionListener

對於每個事件我們都需要一個監聽器來執行動作,所以在extPassWordEvent事件中ActionListener是需要觸發的監聽器...........

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM