![](/img/trans.png)
[英]How can I access an Array List's elements inside an ActionListener from another 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.