Java 这在jdialog中按钮的action listener方法中指的是什么?

Java 这在jdialog中按钮的action listener方法中指的是什么?,java,swing,this,jdialog,Java,Swing,This,Jdialog,在我的对话框中有一个按钮。在它的action listener方法中,这指的是什么?它是按钮的引用还是JDialog的引用?我注意到它是JDialog的引用,因为在我的IDE中,我按下这个键。所有其他组件和容器的方法,如dispose都会出现。如果是这样,它是如何引用JDialog的?它应该是JButton的 jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPer

在我的对话框中有一个按钮。在它的action listener方法中,这指的是什么?它是按钮的引用还是JDialog的引用?我注意到它是JDialog的引用,因为在我的IDE中,我按下这个键。所有其他组件和容器的方法,如
dispose
都会出现。如果是这样,它是如何引用JDialog的?它应该是JButton的

jButton5.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton5ActionPerformed(evt);
        }
    });

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt){
布尔值rB_1=jRadioButton1.isSelected();
布尔值rB_2=jRadioButton2.isSelected();
布尔值rB_4=jRadioButton4.isSelected();
if(rB_2)
新类_design().changeStatusOfMessageDisplayMode(true);

this.dispose();//这看起来像是来自Netbeans.jButton5ActionPerformed的代码,它作为JDialog中的一个方法独立存在。这显然是指包含该方法的JDialog类

    jButton1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            this <---Refers to the ActionListener.
        }
    });
    this <---Refers to the class (JDialog in your case)
jButton1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){

这是对类对象的引用,该类实现了
ActionListener
接口,您可以使用该接口
addActionListener

如果您为此实现了一个“独立”类,那么它将是该类的一个实例。如果您传入了一个匿名类,那么它就是对该匿名类实例的引用

如果操作侦听器是JDialog本身,那么
这个
引用JDialog对象

在您的例子中,您使用的是一个匿名类。因此在
actionPerformed
中,
这个
引用了该类的一个实例。但是请注意,您调用的是一个未在该匿名类中定义的函数。这就是“神奇”发生的地方:内部类引用了封闭类

jButton5ActionPerformed(evt);
相当于:

myenclosingobject.jButton5ActionPerformed(evt);
因此,在
jButton5ActionPerformed
中,
这个
引用了封闭类的对象,即创建匿名类实例的对象

JLS中对此进行了解释:

类O的直接内部类C的实例i与O的实例关联,称为i的直接封闭实例。对象的直接封闭实例(如有)在对象创建时确定(§15.9.2)

1) 你必须读书


2) 如果每个应用程序生命周期只创建一次
JDialog
,然后调用,否则只创建一次
JDialog
,并将其重新用于另一个操作/事件

在您的情况下,我想这是一个场景

可能在netbeans中,您创建了一个jframe,然后添加了一个jdialog。然后添加了一个jbutton,现在双击按钮,为执行的操作编写代码(或者右键单击,事件>操作>操作执行)

注意:然后添加了一个jdialog,我的意思是你把它拖到了框架上


在给定的场景中,这指的是
jframe
,而不是
jdialog

,如果您传入了一个匿名类,那么它是对该匿名类实例的引用。
该匿名类从未扩展过jdialog类。那么我如何能够访问
dispose
之类的方法,我从未说过是的。我认为你没有通过一个匿名类。你的
jButton5ActionPerformed
代码中的
this
将(必须)通过是定义该方法的类的实例。它不能是其他任何对象的实例,而且我认为该方法不在匿名类中。请查看该方法是如何被调用的。现在,您已澄清了您的用例。在我的第二个代码示例中,您有一个对jButton1ActionPerformed方法的调用。当您使用“this”,在这个方法中,它指的是封闭类的实例,在您的例子中是一个JDialog,因为它是这个类的一个方法。在第一个代码示例中,第一个“this”指的是ActionListener对象,因为它是ActionListener类的一个方法,第二个指的是JDialog。
jButton5ActionPerformed(evt);
myenclosingobject.jButton5ActionPerformed(evt);