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);
}
}