将应用程序类引用传递给构造函数(Java)

将应用程序类引用传递给构造函数(Java),java,parameter-passing,actionlistener,dom-events,Java,Parameter Passing,Actionlistener,Dom Events,我有一个应用程序类,如下所示,它实例化了I)我编写的扩展JFrame并实现ActionListener的UI类,以及ii)一个简单的“Invoice”类中的对象。前者将用作主界面,接受特定值(“发票号”)的文本输入,并将这些值传递给后一类(发票)。我想扩展应用程序类(在其中实现main)以允许在其中实现actionPerformed()方法(当然不在main()中),以侦听UI类中两个按钮之一的按下,在事件中创建Purchase类的新实例,这将依次将“this”引用传递给单个UI类实例的按钮。a

我有一个应用程序类,如下所示,它实例化了I)我编写的扩展JFrame并实现ActionListener的UI类,以及ii)一个简单的“Invoice”类中的对象。前者将用作主界面,接受特定值(“发票号”)的文本输入,并将这些值传递给后一类(发票)。我想扩展应用程序类(在其中实现main)以允许在其中实现
actionPerformed()
方法(当然不在
main()
中),以侦听UI类中两个按钮之一的按下,在事件中创建Purchase类的新实例,这将依次将“this”引用传递给单个UI类实例的
按钮。addActionListener()
方法

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class CreatePurchase implements ActionListener {

boolean isInterface = true;
CreatePurchase testing = new CreatePurchase();
SupportiveJFrame uiFrame = new SupportiveJFrame( testing, "Southwest Invoice Systems", isInterface );   
Purchase firstPurchase = new Purchase( uiFrame, true );


public static void main( String args[] ){


}

public void actionPerformed( ActionEvent e ){

    Object source = e.getSource();

    if( source == uiFrame.newInvoice){

        //New object created here


    }

}       
}   

我的问题是,如何将对应用程序类的引用传递给UI构造函数,从而允许它传递给JButton“newObject”?如果我将“uiFrame”和“firstPurchase”的初始化放在
main()
中,“firstPurchase”将超出
actionPerformed(ActionEvent e)
的范围

您可以使用关键字
this
获取对“当前实例”的引用。我不确定您要将其添加到哪个类,但下面的示例应该可以说明这一想法:

public class A {
    private B owner;
    public A(B owner) {this.owner = owner;}

    public void callOwnerDoSomething() {owner.doSomething();}
}

public class B {

    public A theA = new A(this);

    public static void main(String[] args) {
        new B().theA.callOwnerDoSomething(); // prints "Hello"
    }

    public void doSomething() {
        System.out.println("Hello");
    }
}

@阿德里亚姆。不是真的。我发布的代码只是为了演示如何使用它;它不应该像你的代码。查看
newa(this)
的工作原理,忽略
doSomething
callOwnerDoSomething
(它们只是为了演示)
doSomething
在代码中有点像
actionPerformed
。问题似乎是,如果我想从actionPerformed(ActionEvent e)传递“firstPurchase”引用,它的实现位置与“public void doSomething()”相同,那么firstPurchase“需要在main()之外初始化。但是,由于初始化此对象需要创建JFrame扩展类实例,因此我在“firstPurchase”之前对其进行了初始化,因此在main()之前进行了初始化。这会导致将某种无效的此引用传递给uiFrame构造函数,但不会引发异常。程序立即终止。