簡體   English   中英

如何從一個actionListener返回一個數組列表,然后將其調用到另一個actionListener?

[英]how to return an array-list from a actionListener and then call it to another actionListener?

現在我基本上有這個:

class ConvertButtonListener implements ActionListener 
{
    public void actionPerformed(ActionEvent evt) 
    {
        //Do stuff
        ArrayList<String> blah = new ArrayList<String>();
        blah.add(item);
    }
}

我需要在另一個動作偵聽器中使用它:

class UploadButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent evt) {
                ArrayList<String> attachmentFileListUpload = new ArrayList<String>();
                getAttachmentFileList(attachmentFileListUpload);
                JFrame uploadFrame = new UploadFrame(attachmentFileList);
                //UploadFrame is a seperate class that extends JFrame
            }
        }

然后我有這個

public ArrayList<String> returnAttachmentFileList(ArrayList<String> attachmentFileList)
    {
        return attachmentFileList;
    }
public ArrayList<String> getAttachmentFileList(ArrayList<String> attachmentFileListUpload)
    {
        attachmentFileListUpload = attachmentFileList.clone();
    }

我知道我可以找到一種使它最終完成並使其運行的方法,這會容易得多,但是我覺得這是我最終需要學習的重要知識。 我絕對需要將方法放在不同的類中嗎?

編輯:我仍在研究中,我是否需要在另一個類中聲明ArrayList,然后擴展.add()方法?

我正在做的是獲取在ConvertButtonListener中檢索的文件,並將它們的base64內容和文件名保存在2個不同的數組中,對於uploadButtonListener,我需要它能夠查看是否有文件存在(這是很多代碼,所以接受它並為其他actionListener對其進行調整將花費幾個小時,因此我試圖將其粘貼到數組中並返回它),因此我想檢查數組是否為null,如果不為null,則將數組傳遞給新框架並掃描整個文件(我將整個文件放在字符串中)以查找舊文件的內容,然后將其替換為將要上傳的新文件的base64內容。

很難根據代碼示例確切地確定要執行的操作,但是如果您只是想傳遞一個列表,為什么不使用代表該列表的單例對象並傳遞該列表,而不用擔心創建該列表新的,獲取/設置等。

單例樣本:

public final class MyArrayList {

private static MyArrayList myArrayList = null;
private List<String> aListOfSomething = new ArrayList<String>();

private MyArrayList() {
}

// Global access point with lazy instantiation
public static MyArrayList getInstance() {
    if (myArrayList == null) {
        myArrayList = new MyArrayList();
    }
    return myArrayList;
}

public List<String> getMyList() {
    return aListOfSomething;
}

}

然后,在您的任何一個班級中,您都可以這樣稱呼它。

    MyArrayList.getInstance().getMyList().add("File1");
    MyArrayList.getInstance().getMyList().add("File2");
    MyArrayList.getInstance().getMyList().add("File3");

請注意,此單例非常基礎,可以在以下位置找到高級實現:www.jasonsjavadocs.com

這是另一段可能會有所幫助的代碼...

class ConvertButtonListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {

    MyArrayList.getInstance().getMyList().clear();
    MyArrayList.getInstance().getMyList().add("Item1");
    MyArrayList.getInstance().getMyList().add("Item2");
    MyArrayList.getInstance().getMyList().add("Item3");

}
}


class UploadButtonListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {

    if (MyArrayList.getInstance().getMyList().isEmpty()) {
        // do nothing
    } else {
        // pass array to new frame
    }

}
}

ActionListener我們確實重寫了方法public void actionPerformed()因為它的返回類型為void,所以它不能返回任何內容,就像您在問題中所提出的那樣。

您可以做的是,使列表成為實例變量或類變量,然后在actionPerformed方法中設置其值。

然后,您可以通過對象(如果是實例變量)或通過任何其他偵聽器中的類名(如果是類變量)來訪問它。

class Demo{
     ArrayList<WHATEVER> list = null;

    .....

    public void actionPerformed(ActionEvent ae){
          //Do What you want
          list.add(STUFF);
    }
}

上一類中的列表是實例變量,因此可以通過此類的對象在任何其他類/偵聽器中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM