从一个类到另一个类的 ArrayList
Posted
技术标签:
【中文标题】从一个类到另一个类的 ArrayList【英文标题】:ArrayList from one class to another 【发布时间】:2017-10-19 01:30:30 【问题描述】:我已经阅读了好几页的 ***,但我无法将我的 ArrayList 复制到另一个类。这是一个场景,我正在构建一个快速的图书保护应用程序,类似于您在图书馆中的应用程序,但更简单(用于学校)。
我有我的主库类(带有主),它为主菜单/选项设置了摆动。
我有一个带有新书构造函数的书类,如下所示:
public class Livre
private String titre;
private String soustitre;
private String auteur;
private String editeur;
private String collection;
private String isbn;
private long cup;
private double prixDeVenteSuggere;
private double prixVente;
private int nbPages;
private boolean disponible;
public Livre(String titre, String soustitre, String auteur, String editeur, String collection, String isbn, long cup, double prixDeVenteSuggere, double prixVente, int nbPages, boolean disponible)
this.titre = titre;
this.soustitre = soustitre;
this.auteur = auteur;
this.editeur = editeur;
this.collection = collection;
this.isbn = isbn;
this.cup = cup;
this.prixDeVenteSuggere = prixDeVenteSuggere;
this.prixVente = prixVente;
this.nbPages = nbPages;
disponible = true;
public Livre()
public String getTitre()
return titre;
public void setTitre(String titre)
this.titre = titre;
public String getSoustitre()
return soustitre;
public void setSoustitre(String soustitre)
this.soustitre = soustitre;
public String getAuteur()
return auteur;
public void setAuteur(String auteur)
this.auteur = auteur;
public String getEditeur()
return editeur;
public void setEditeur(String editeur)
this.editeur = editeur;
public String getCollection()
return collection;
public void setCollection(String collection)
this.collection = collection;
public String getIsbn()
return isbn;
public void setIsbn(String isbn)
this.isbn = isbn;
public long getCup()
return cup;
public void setCup(long cup)
this.cup = cup;
public double getPrixDeVenteSuggere()
return prixDeVenteSuggere;
public void setPrixDeVenteSuggere(double prixDeVenteSuggere)
this.prixDeVenteSuggere = prixDeVenteSuggere;
public double getPrixVente()
return prixVente;
public void setPrixVente(double prixVente)
this.prixVente = prixVente;
public int getNbPages()
return nbPages;
public void setNbPages(int nbPages)
this.nbPages = nbPages;
public boolean isDisponible()
return disponible;
public void setDisponible(boolean disponible)
this.disponible = disponible;
Library 类(使用 WindowBuilder 构建)上的选项 #1 具有“新建”按钮,该按钮打开第二个 JFrame
以输入与图书有关的所有信息。
在这个JFrame
类中,我在确认按钮上添加了一个actionListener
,以确认JTextFields
上的输入以添加为对象,如下所示:
public void confirmerLivre()
l = new Livre(txtTitre.getText(), txtSousTitre.getText(), txtAuteur.getText(),
txtEditeur.getText(), txtCollection.getText(), txtISBN.getText(),
Long.parseLong(txtCodebar.getText()), Double.parseDouble(txtPrixMSRP.getText()),
Double.parseDouble(txtPrix.getText()), Integer.parseInt(txtPages.getText()), true);
confirmerLivre.add(l); /// confirmerLivre is defined as an ArrayList
我无法理解的是能够从第二个 JFrame
类中获取 ArrayList
confirmerLivre 并将其推送到我的主要 JFrame
类中,以便通过其他选项进一步操作。
任何帮助将不胜感激。 谢谢
【问题讨论】:
【参考方案1】:可能最快的解决方法是在您的主 JFrame 类中创建/公开这些方法:
getBookList()
setBookList()
当您创建弹出式 JFrame 时,您需要在其构造函数中将主 JFrame 类的实例传递给它:
public PopupFrame extends JFrame
private MainFrame main;
public PopupFrame(MainFrame main)
this.main = main;
现在您可以从弹出窗口访问您的主 JFrame 类,您只需转到 main.getBookList()
即可获取列表(我建议您也阅读 this question)
【讨论】:
非常感谢您,下面有一个答案,可以访问类之间的 ArrayList,这要归功于它的全局范围,但是您的 getter/setter 方法是老师需要看到的。再次感谢【参考方案2】:如果您在第二个 JFrame
类(在任何方法之外)中将 ArrayList
创建为公共变量,那么它可以在第一个类中使用,例如:
SecondJFramesName.confirmerLivre()
在此代码中,SecondJFramesName
是您的第二个 JFrame
类的名称。现在您的 ArrayList
是一个公共变量,它可以在类外访问。
注意:您的第二个 JFrame
的名称是您用来创建它的名称,例如:
JFrame SecondJFramesName = new JFrame("My title");
如果您需要任何更具体的细节,请发表评论!
希望这会有所帮助!
【讨论】:
谢谢你 100 次,这行得通。由于老师的限制,我需要使用 getter/setter 方法。 太棒了!我很高兴它有帮助。另外,如果您认为这是一个好的答案,请点赞(点击左侧数字旁边的向上箭头),以便其他查看问题的人知道! 我做到了,但由于我的声望点低于 15,它显然没有公开显示。等到 15 点我就回来【参考方案3】:也许observer pattern 可以帮助你:
public interface ConfirmerLivreMonitor
void onConfirmerLivreChange(List<...> confirmerLivre);
然后
//...
private ConfirmerLivreMonitor confirmerLivreMonitor;
public void setConfirmerLivreMonitor(ConfirmerLivreMonitor confirmerLivreMonitor )
this.confirmerLivreMonitor = confirmerLivreMonitor
//....
public void confirmerLivre()
l = new Livre(txtTitre.getText(), txtSousTitre.getText(), txtAuteur.getText(),
txtEditeur.getText(), txtCollection.getText(), txtISBN.getText(),
Long.parseLong(txtCodebar.getText()), Double.parseDouble(txtPrixMSRP.getText()),
Double.parseDouble(txtPrix.getText()), Integer.parseInt(txtPages.getText()), true);
confirmerLivre.add(l); /// confirmerLivre is defined as an ArrayList
if(confirmerLivreMonitor != null) //notify confirmerLivre change
confirmerLivreMonitor.onConfirmerLivreChange(confirmerLivre);
制作Main JFrame实现ConfirmerLivreMonitor,这样你就可以:
sencondJFrame.setConfirmerLivreMonitor(this);
或者只是传递一个匿名类:
sencondJFrame.setConfirmerLivreMonitor(new ConfirmerLivreMonitor()
public void onConfirmerLivreChange(List<...> confirmerLivre)
//display in Main JFrame,maybe
);
一旦confirmerLivre改变,主框架可以显示(或其他) 第一次,很酷
【讨论】:
以上是关于从一个类到另一个类的 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
jQuery选择从一个类到另一个类的元素。一切都在同一水平上 Title 1