![](/img/trans.png)
[英]How can I access an Array List's elements inside an ActionListener from another 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.