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

Java 如何从actionListener返回数组列表,然后将其调用给另一个actionListener?,java,arraylist,return,return-value,actionlistener,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 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内容和文件名保存在两个不同的数组中,对于uploadButtonListener,我需要它来查看是否存在任何文件这是大量代码,因此,获取它并为其他actionListener调整它将花费数小时,因此我尝试将其粘贴在数组中并返回它,以便检查数组是否为空,如果不为空,我将数组传递到一个新帧并扫描整个文件,我将整个文件放入一个字符串中,查找旧文件的内容,然后将其替换为将上载的新文件的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;
}

}
注意这个单例是非常基本的,高级实现可以在这里找到: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方法中设置其值

然后,您可以通过对象if实例变量或通过类名if类变量在任何其他侦听器中访问它

class Demo{
     ArrayList<WHATEVER> list = null;

    .....

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

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

为什么需要2个ArrayList来存储值,可以使用映射来存储键/值base64值/文件名吗?也许可以使用ArrayList等作为源来创建自己的ActionEvent。然后'AwtEventQueue.invokeLater调用另一个已执行的操作。映射是一个非常好的主意!但是我仍然会遇到在另一个类中使用arraymap的问题。我在我的第一篇文章中添加了更多的示例代码,以澄清如何解决这个问题。您可以很容易地修改它以使用Map而不是ArrayList。谢谢!我试着看看我是否能在不让它成为自己的课程的情况下做到这一点,但我想这仍然给了我很多麻烦。我感谢你的帮助!不过还有一个问题,我是否能够在动作侦听器中添加到它,而不必扩展.add/.put方法?我编辑来说明我在做什么,我对从类返回知之甚少。我需要在convert listener Dependent中更新这些数组,更新它们返回的文件,然后我需要能够获取这些数组并在uploadListener中使用它们。如果您需要任何澄清,请询问!我知道让它们成为最终版本会让这更容易,但我觉得这是一件大事,我应该学习,而不是忽略它。我不想从ActionListener返回任何东西,我想创建一个方法来保存值,并允许我在不同的ActionListener中使用它。但我开始认为它必须是它自己的课
class Demo{
     ArrayList<WHATEVER> list = null;

    .....

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