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

Passing an Application Class Reference to Constructor (Java)

我有一个应用程序 class,如下所示,它实例化了 i) a UI class 我写的扩展 JFrame 和实现 ActionListener 的对象,以及 ii) a简单 "Invoice" class。前者将用作接受文本输入的主界面,用于特定值 ("invoice number"),并将这些值传递给后者 class(发票)。我想扩展应用程序 class(其中实现了 main)以允许在其中实现 actionPerformed() 方法(当然不在 main() 内)以收听新闻UI class 中的两个按钮之一,在事件上创建购买 class 的新实例,这将依次传递一个 'this' 引用到单个 UI class 实例的 button.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


    }

}       
}   

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

您可以使用关键字 this 来获取对 "current instance" 的引用。我不确定你想把它添加到哪个 class,但这里有一个例子可以证明这个想法:

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");
    }
}