Java 什么是;这";在这个节目里是什么意思?
我在写一个程序,然后我在一些网站上看到了这个,在这个代码中使用了Java 什么是;这";在这个节目里是什么意思?,java,Java,我在写一个程序,然后我在一些网站上看到了这个,在这个代码中使用了this关键字,我想知道它的用途是什么,它可以处理一个Jbutton,或者JTextField,它可以使用this关键字显示消息,getSource()发生了什么 这是密码 import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; imp
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()));
}
}
}
此
始终是对对象当前实例的引用
TextPasswordEvent
类的一个实例您正在查看一个内部类。在这个场景中,甚至有多个版本的this
普通
这个将是内部类(即TextHandler)的实例。如果需要引用包含类的实例,则必须使用类名限定它:TextPassWordEvent。这表示您引用的是当前上下文
这意味着类TextHandler中的当前上下文是ActionListener
对于每个事件,我们都需要一个监听器来执行操作,因此在extPassWordEvent事件中,ActionListener是触发………..所需的监听器。在java中,它指的是当前对象实例。
在上面的示例中,使用“this”的位置是在内部类中的某些代码中。如果此代码在没有任何上下文的情况下使用“this”,那么它将引用内部类的实例
Java提供了OuterClassName.this的表示法,作为引用该内部类在其中实例化的外部类实例的一种方式
因此,它只是引用TextPasswordEvent类的实例
TextPasswordEvent是一个容器,当调用showMessageDialogue时,您需要传递一个容器,在其中显示对话框,因此TextPasswordEvent。这表示将“传递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);
如果我点击其中任何一个组件,它会返回它们的值吗?或者我现在关注的对象???或者它将作为我关注的对象的事件源?是的,三个组件将以某种方式响应。一条显示被调用事件的操作命令的消息。soo是上层类。这就像用一种非常粗糙的方式说getSource()?“是”TextPassWordEvent。这是一个JPanel,在其上显示消息对话框。为什么是JPanel?如果我点击按钮呢?这意味着,如果我当前正在关注某个组件或与之交互,我按下它,或按下enter键,它将输出其动作命令,这些组件中的任何一个。编辑我的帖子来解释更多关于代码在做什么-你可能应该阅读Swing事件机制。但简而言之-是的,这是正确的用户962206-当用户与控件交互并按enter键时,消息对话框将显示动作命令,无论它是哪个组件。引用在actionEvent上创建事件调用getSource()的实际组件。然后,您可以将其与TextPasswordEvent.this.button、TextPasswordEvent.this.textField1等进行比较,以确定如果您想对其进行更多操作,将其转换为什么类型。(但是如果你想让不同的组件类型有不同的行为,你可能最好创建不同的ActionListener实现。在这种情况下,你能在这个例子中为我展示不同的实现或关于不同监听器的例子吗?比如Jbutton组件?与最初的问题有点偏离主题,但我已经编辑了我的回答显示这一点。是的,我指的是上层阶级,但我的问题是,如果我当前正在与这些组件中的任何一个进行交互,它将返回给我它们的actionCommand值??就像我单击按钮,或在文本字段中按enter键?因此,这指的是任何实例(组件)上面的类?我说的对吗?不,这总是指对象的实例,而不是对象内部的任何变量,你不叫这个。text你叫这个。button。text哦,我明白了!如果我点击JTextField并按enter,它将是这个。Textfield。text??或者如果我按“this.button.text”??