【问题标题】:how to return an array-list from a actionListener and then call it to another actionListener?如何从 actionListener 返回一个数组列表,然后将其调用到另一个 actionListener?
【发布时间】:2014-08-31 23:12:27
【问题描述】:

现在我基本上有这个:

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 调整它需要几个小时,所以我试图将它粘贴在一个数组中并返回它)所以我想检查数组是否为空,如果它不为空,我通过数组到一个新框架,并扫描整个文件(我把整个文件放在一个字符串中)以查找旧文件的内容,然后将其替换为将要上传的新文件的 base64 内容。

【问题讨论】:

  • 为什么需要2个arraylists来存储值,可以使用MAP来存储key/value(base64值/文件名)吗?
  • 也许您可以使用 ArrayList(或其他)作为源来制作自己的 ActionEvent。然后`AwtEventQueue.invokeLater 调用另一个actionPerformed。
  • 地图的东西是一个非常非常好的主意!但是我仍然会遇到必须在另一个类中使用数组映射的问题。
  • 我在第一篇文章中添加了更多示例代码,以阐明如何解决该问题。您可以轻松修改它以使用 Map 而不是 ArrayList.
  • 谢谢!我试图看看我是否可以在不让它成为自己的课程的情况下做到这一点,但我想这仍然让我有很多事情要做。感谢您的帮助!还有一个问题,我可以在 Action Listener 中添加它而无需扩展 .add()/.put() 方法吗?

标签: java arraylist return return-value actionlistener


【解决方案1】:

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

单例示例:

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
    }

}
}

【讨论】:

  • 我编辑说我在做什么,我对下课返回知之甚少。我需要在转换侦听器中根据它们带回的文件更新数组,然后我需要能够获取这些数组并在我的 uploadListener 中使用它们。如果您需要任何澄清,请询问!我知道让它们成为最终版本会让这件事变得更容易,但我觉得这是我应该学习而不是忽略它的大事。
【解决方案2】:

在ActionListener 中,我们确实覆盖了public void actionPerformed() 方法,因为它的返回类型为void,所以它不能返回任何东西,正如您在问题中所问的那样。

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

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

class Demo{
     ArrayList<WHATEVER> list = null;

    .....

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

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

【讨论】:

  • 我不想从 ActionListener 返回任何东西,我正在尝试创建一个方法来保存该值并允许我在不同的 ActionListener 中使用它。我开始认为它必须是它自己的课程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2012-05-24
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多