[英]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.