我有一個應用程序類,如下面直接顯示的那樣,它實例化i)我寫的擴展JFrame並實現ActionListener的UI類,以及ii)一個簡單的「發票」類。前者將被用作接受文本輸入的主界面,用於特定值(「發票號碼」),並將這些值傳遞給後一類(發票)。我想擴展應用程序類(在其中實現main)以允許在其中實現actionPerformed()方法(當然不是在main()內)來監聽UI類中兩個按鈕之一的按下,在事件上創建Purchase類的新實例,然後將這個引用傳遞給單個UI類實例的button.addActionListener()方法。將應用程序類引用傳遞給構造函數(Java)
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」?如果我在main()中放置「uiFrame」和「firstPurchase」的初始化,「firstPurchase」將不在actionPerformed(ActionEvent e)的範圍之內。
@AdrianM。不是真的。我發佈的代碼僅用於*演示*如何*可以使用;它不應該像你的代碼。看看'new A(this)'的作品,並且忽略'doSomething'和'callOwnerDoSomething'(這僅僅是爲了演示)。 'doSomething'就像你的代碼中的'actionPerformed'。 – immibis 2015-02-12 00:36:19
這個問題似乎是,如果我想通過actionPerformed(ActionEvent e)中的「firstPurchase」引用,在具有「public void doSomething()」的地方實現,則firstPurchase需要在main ()。然而,因爲初始化這個對象需要創建JFrame擴展類實例,所以我在「firstPurchase」之前初始化它 - 因此,在main()之前,這會導致某些無效的引用被傳遞給uiFrame構造函數儘管沒有拋出異常,程序立即終止。 – 2015-02-12 00:42:20