我已经阅读了很多页面的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
课程以便进一步操作其他选择。
任何帮助将不胜感激。 谢谢
答案 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
}
});
一旦确认者改变,主框架可以显示(或其他) 第一次,很酷