ArrayList从一个类到另一个类

时间:2017-05-19 03:59:48

标签: java swing arraylist

我已经阅读了很多页面的stackoverflow但是我无法将我的ArrayList复制到另一个类。这是一个场景,我正在构建一个快速的图书保护程序应用程序,类似于您在图书馆中所拥有的,但更简单(对于学校)。

我有我的主库类(带主),为主菜单/选项设置了swing。

我的书类包含新书的构造函数,如下所示:

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
}

我无法理解的是能够从第二个ArrayList课程中取出JFrame确认者Livre并将其推送到我的主JFrame课程以便进一步操作其他选择。

任何帮助将不胜感激。 谢谢

3 个答案:

答案 0 :(得分:0)

可能最快的解决方法是在主JFrame类中创建/公开这些方法:

  • getBookList()
  • setBookList()

创建弹出窗口JFrame时,需要在构造函数中将主JFrame类的实例传递给它:

public PopupFrame extends JFrame {
  private MainFrame main;
  public PopupFrame(MainFrame main) {
    this.main = main;
  }
}

现在您可以从弹出式窗口访问主JFrame类,只需转到main.getBookList()即可获取列表(我建议您同时阅读this question

答案 1 :(得分:0)

如果您在第二个ArrayList类中创建JFrame作为公共变量(在任何方法之外),那么它可以在第一个类中使用,例如:

SecondJFramesName.confirmerLivre()

在此代码中,SecondJFramesName是您的第二个JFrame类的名称。既然你的ArrayList是一个公共变量,它可以在课外访问。

注意:您的第二个JFrame名称就是您用来创建它的名称:

JFrame SecondJFramesName = new JFrame("My title");

如果您需要更多具体细节,请发表评论!

希望这有帮助!

答案 2 :(得分:0)

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

使主JFrame实现ConfirmerLivreMonitor,以便您可以:

sencondJFrame.setConfirmerLivreMonitor(this);

或者只是传递一个匿名类:

sencondJFrame.setConfirmerLivreMonitor(new ConfirmerLivreMonitor(){

        public void onConfirmerLivreChange(List<...> confirmerLivre){
            //display in Main JFrame,maybe
        }
});

一旦确认者改变,主框架可以显示(或其他)  第一次,很酷