2017-05-19 2 views
0

Ich habe einige Seiten von stackoverflow gelesen, aber ich konnte meine ArrayList nicht in eine andere Klasse kopieren lassen. Hier ist das Szenario, ich baue eine schnelle Buchschoner-App, ähnlich wie in einer Bibliothek, aber einfacher (für die Schule).ArrayList von einer Klasse zur anderen

Ich habe meine Hauptbibliothek Klasse (mit dem Haupt), die die Schaukel für das Hauptmenü/Optionen eingerichtet hat.

Ich habe das Buch-Klasse mit dem Konstruktor für neue Bücher wie folgt:

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

}

Option # 1 auf der Bibliothek-Klasse (mit Windowbuilder gebaut) die Schaltfläche „Neu“, das sich öffnet eine zweite JFrame, um alle Informationen in Bezug auf das Buch einzugeben.

in dieser JFrame Klasse habe ich eine actionListener auf der Bestätigungstaste hinzugefügt, um den Eingang auf der JTextFields zu bestätigen als Objekt hinzugefügt werden, wie folgt:

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 
} 

Was kann meinen Kopf nicht wickeln I herum ist in der Lage, die ArrayList confirmerLivre aus der 2. JFrame Klasse zu nehmen und schieben Sie es auf meine Haupt JFrame Klasse, um mit anderen Optionen weiter manipuliert werden.

Jede Hilfe wird sehr geschätzt. Danke

Antwort

0

Wahrscheinlich die schnellste Lösung ist, diese Methoden in Ihrer Haupt-JFrame Klasse erstellen/aussetzen:

  • getBookList()
  • setBookList()

Wenn Sie Ihren Popup-JFrame erstellen, benötigen Sie Um eine Instanz Ihrer Haupt-JFrame-Klasse in ihrem Konstruktor an sie zu übergeben:

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

Nun, da Sie Zugriff auf Ihre Haupt-JFrame Klasse von Ihrem Popup haben, können Sie einfach main.getBookList() gehen, um die Liste zu bekommen (ich this question Lesen empfehlen würde auch)

+0

für dieses Vielen Dank, gibt es eine Antwort unten mit Zugriff auf die Arraylist zwischen den Klassen dank seine globale Reichweite, aber mit Ihrer Getter/Setter-Methode ist die, die der Lehrer sehen muss. Danke nochmal –

0

Wenn Sie Ihre ArrayList als öffentliche Variable in der erstellen zweite JFrame Klasse (außerhalb jedes der Verfahren), dann kann es in der ersten Klasse verwendet werden, wie: SecondJFramesName

SecondJFramesName.confirmerLivre() 

in diesem Code ist der Name Ihres zweiten JFrame Klasse. Nun, da Ihre ArrayList eine öffentliche Variable ist, kann auf sie außerhalb der Klasse zugegriffen werden.

Hinweis: Ihre zweite JFrame ‚s Name ist, den Sie es in einer Weise, wie dies zum Erstellen:

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

Wenn Sie genauere Angaben benötigen Sie einen Kommentar!

Hoffentlich hilft das!

+0

Danke 100 mal, das funktioniert. Die Getter/Setter-Methode ist diejenige, die ich aufgrund der Beschränkungen des Lehrers brauche. –

+0

Großartig! Ich bin froh, dass es geholfen hat. Auch wenn Sie denken, dass es eine gute Antwort ist, upvote es (klicken Sie auf den Pfeil nach oben neben der Nummer auf der linken Seite), damit andere Leute, die die Frage sehen, wissen! – JFreeman

+0

habe ich, aber da meine Reputationspunkte unter 15 liegen, wird es offenbar nicht öffentlich gezeigt. Ich werde zurück sein, sobald es 15 –

0

Vielleicht könnte observer pattern Ihnen helfen:

public interface ConfirmerLivreMonitor{ 
    void onConfirmerLivreChange(List<...> confirmerLivre); 
} 

dann

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

der Haupt JFrame implemnents ConfirmerLivreMonitor machen, so können Sie:

sencondJFrame.setConfirmerLivreMonitor(this); 

oder nur eine anonyme Klasse übergeben:

sencondJFrame.setConfirmerLivreMonitor(new ConfirmerLivreMonitor(){ 

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

einmal die confirmerLivre Änderung kann der Hauptrahmen angezeigt werden (oder etwas anderes) das erste Mal, sehr cool

Verwandte Themen