从一个类到另一个类的 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 类中获取 ArrayListconfirmerLivre 并将其推送到我的主要 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

如何完成飞镖类从导航一个类到另一个类,如android Native Applications(完成上一课)?

从嵌套类到包含类的 C# 成员访问 [重复]

C++ 类到 C# 类的转换

从基类到派生类的静态转换后找不到成员函数

从基类到不同派生类的多重继承转换