2017-05-19 4 views
0

私はかなりのページ数のstackoverflowを読みましたが、別のクラスにコピーするためにArrayListを取得できませんでした。ここにシナリオがあります。私は図書館にあるものに似ていますが、より簡単な(学校用の)ブックセーフなアプリを作っています。あるクラスから別のクラスへのArrayList

私は、メインメニュー/オプションのスイングを設定したメインライブラリクラス(メイン)を持っています。

次のように私は新しい書籍のコンストラクタを持つBookクラスを持っている:(WindowBuilderで構築された)ライブラリクラスの

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

}

オプション#1が開き、「新規」ボタンを持っています第2のJFrameはその本に関するすべての情報を入力する。このJFrameクラスの

、私は次のようにオブジェクトとして追加するJTextFields上の入力を確認するために、確認ボタンにactionListenerを追加しました:

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 
} 

私は私の頭をラップすることはできませんどのような2番目のJFrameクラスからArrayList confirmerLivreを取得し、それをメインのJFrameクラスにプッシュして、他のオプションでさらに操作することができます。

ご協力いただきますようお願い申し上げます。 は

答えて

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を読んでお勧めします)

+0

非常にクールなこのためにどうもありがとうございました、クラス間のArrayListへのアクセス権を持つ以下の答えがありますおかげでそのグローバルスコープは、あなたのゲッター/セッターメソッドで、教師が見る必要があるものです。再度ありがとう –

0

あなたがパブリック変数としてあなたArrayListを作成した場合それは、例えば、第1のクラスで使用することができる第二JFrameクラス(メソッドのいずれかの外側):このコードSecondJFramesName

SecondJFramesName.confirmerLivre() 

は、2番目のJFrameクラスの名前です。 ArrayListが公開変数であるため、クラス外でアクセスすることができます。

注:2番目のJFrameの名前は、あなたがこのような方法でそれを作成するために使用するものである:

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

あなたが任意のより具体的な詳細が必要な場合はコメントしてください!

うまくいけば、これが役に立ちます。

+0

100回ありがとう、これは動作します。ゲッター/セッターメソッドは、先生の制約のために必要なメソッドです。 –

+0

素晴らしい!私はそれが助けてうれしいです。また、あなたがそれを知っている他の人が知っているように、それが良い答えであると思うなら(左の数字の横にある上向きの矢印をクリックしてください) – JFreeman

+0

私は言ったが、私の評判ポイントが15歳以下であることから、明らかに公然と示されていない。一度それがヒットすると私は戻ってくるでしょう –

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 implemnents ConfirmerLivreMonitorします

sencondJFrame.setConfirmerLivreMonitor(this); 

か、単に匿名クラスを渡しました:

confirmerLivre変更一度
sencondJFrame.setConfirmerLivreMonitor(new ConfirmerLivreMonitor(){ 

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

、メインフレームで表示(または他の何か)ができ 初めて、

関連する問題