将应用程序类引用传递给构造函数(Java)
我有一个应用程序类,如下所示,它实例化了I)我编写的扩展JFrame并实现ActionListener的UI类,以及ii)一个简单的“Invoice”类中的对象。前者将用作主界面,接受特定值(“发票号”)的文本输入,并将这些值传递给后一类(发票)。我想扩展应用程序类(在其中实现main)以允许在其中实现将应用程序类引用传递给构造函数(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
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构造函数,但不会引发异常。程序立即终止。