如何从actionListener返回一个数组列表,然后将其调用到另一个actionListener?

时间:2014-07-10 14:14:05

标签: java arraylist return return-value 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内容。

2 个答案:

答案 0 :(得分:0)

很难根据代码示例准确确定您要执行的操作,但如果您只是想要传递一个列表,为什么不使用代表该列表的单例对象并传递它而不是担心创建新的,获取/设置等等。

示例单身人士:

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
    }

}
}

答案 1 :(得分:0)

ActionListener我们会覆盖方法public void actionPerformed()因为它返回类型为void,所以无法返回任何内容,正如您在问题中提出的那样。

您可以做的是,使列表成为实例变量或类变量,然后在actionPerformed方法中设置其值。

然后你可以通过对象(如果是实例变量)或通过任何其他监听器中的类名(如果是类变量)来访问它。

class Demo{
     ArrayList<WHATEVER> list = null;

    .....

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

上面的类中的列表是实例变量,因此可以通过此类的对象在任何其他类/侦听器中使用。