繁体   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