我有一个程序将数据添加到ArrayList。然后从主菜单中按下一个按钮,它会显示整个ArrayList。问题是,当我填写表单时,它将添加到ArrayList,但是当你转到主菜单时,它会忘记ArrayList中的所有内容并显示为空。
我知道我需要设置一些东西(我以前做过一次),但我无法理解。
这是主菜单:
import java.awt.EventQueue;
public class KlantenbindingFrame extends JFrame implements ActionListener {
/**
private static final long serialVersionUID = 1L;
JFrame frame;
private JButton toonKlanten, toonAutos, toonOverzicht, voegKlantToe,
private JPanel contentPane;
private Klantenbinding klantenBindingRef;
private Klant klantRef;
* Launch the application.
public static void main(String[] args) {
* Create the frame.
public KlantenbindingFrame() {
public void actionPerformed(ActionEvent e) {
// klantenBindingRef = new Klantenbinding();
if (e.getSource() == voegKlantToe) {
KlantToevoegen vkt = new KlantToevoegen();
// vkt.setKlantenBindingRef(klantenBindingRef);
vkt.setVisible(true);
// setVisible(false);
}
if (e.getSource() == toonOverzicht) {
System.out.println(klantenBindingRef.toString());
JOptionPane.showMessageDialog(null,
klantenBindingRef.toString(),
"Alle klanten", JOptionPane.INFORMATION_MESSAGE);
}
}
public void setKlantenBindingRef(Klantenbinding klantenBindingRef) {
this.klantenBindingRef = klantenBindingRef;
}
public void setKlantRef(Klant klantref) {
this.klantRef = klantref;
}
public void setDeKlant(Klant klantref){
this.klantRef = klantref;
}
}
这是存储ArrayList的类:
import java.util.ArrayList;
import java.util.List;
public class Klantenbinding {
private String naam;
protected List<Klant> alleKlanten = new ArrayList<Klant> ();
public void voegKlantToe(Klant k){
if (alleKlanten.indexOf(k) == -1){
alleKlanten.add(k);
}
}
public List<Klant> getAlleKlanten(){
return alleKlanten;
}
public void setAlleKlanten(ArrayList<Klant> alleKlanten) {
this.alleKlanten = alleKlanten;
}
public boolean heeftKlant(String naam) {
boolean b = false;
for (Klant k : alleKlanten) {
if (k.getNaam() == naam) {
b = true;
}
}
return b;
}
public void verwijderKlant(Klant exKlant) {
if (heeftKlant(exKlant.getNaam())) {
alleKlanten.remove(exKlant);
}
}
public boolean zoekKlant(Klant nweKlant) {
for (Klant k : alleKlanten) {
if (k.equals(nweKlant)) {
return true;
}
}
return false;
}
public Klant zoekKlant(String naam) {
Klant antw = null;
for (Klant k : alleKlanten){
if (k.getNaam() == naam){
antw = k;
}
}
return antw;
}
public void verwijderKlant (String naam){
Klant gezochte = zoekKlant(naam);
if (gezochte != null){
alleKlanten.remove(gezochte);
}
}
public int aantalKlanten() {
return alleKlanten.size();
}
public String getNaam(){
return naam;
}
public String toString() {
String s = "ATD heeft " + aantalKlanten() + " klant(en). \n\n";
for (Klant k : alleKlanten) {
s += k + "\n";
}
return s;
}
}
这是我将客户添加到ArrayList的类:
import java.awt.*;
public class KlantToevoegen extends JFrame implements ActionListener {
/**
JFrame frame;
private static final long serialVersionUID = 1L;
private JButton voegToe, terug;
private JPanel contentPane;
private JTextField nmTf, strTf, hnrTf, pcTf, plTf, telnrTf, emailTf;
lblHuisnr, lblPostcode, lblPlaats, lblTelnr, lblEmail;
private JComboBox<?> aanhefBox;
private Klantenbinding klantenBindingRef;
private JSeparator separator;
private JSeparator separator_1;
private Klant klantref;
* Launch the application.
public static void main(String[] args) {
* Create the frame.
public KlantToevoegen() {
public void actionPerformed(ActionEvent e) {
String foutmelding = "Controleer of alle gegevens zijn ingevuld";
String naam = nmTf.getText();
String straat = strTf.getText();
String huisnummer = hnrTf.getText();
String postcode = pcTf.getText();
String plaats = plTf.getText();
String telefoonnummer = telnrTf.getText();
String email = emailTf.getText();
boolean allesoke = true;
klantenBindingRef = new Klantenbinding();
if (e.getSource() == terug) {
KlantenbindingFrame kbf = new KlantenbindingFrame();
kbf.setKlantenBindingRef(klantenBindingRef);
setVisible(false);
}
if (e.getSource() == voegToe) {
if ("".equals(naam) || "".equals(straat) || "".equals(huisnummer)
|| "".equals(postcode) || "".equals(plaats)
|| "".equals(telefoonnummer) || "".equals(email)) {
allesoke = false;
foutmelding += "\n";
}
if (allesoke) {
klantref = new Klant(nmTf.getText());
klantenBindingRef.voegKlantToe(klantref);
System.out.println(naam + straat + huisnummer + klantenBindingRef.toString());
JOptionPane.showMessageDialog(null, "Klant toegevoegd" + naam,
"Toegevoegd", JOptionPane.INFORMATION_MESSAGE, null);
terugHoofdmenu();
} else {
JOptionPane.showMessageDialog(null, foutmelding, "Foutmelding",
JOptionPane.INFORMATION_MESSAGE, null);
}
}
}
private void terugHoofdmenu() {
setVisible(false);
KlantenbindingFrame kf1 = new KlantenbindingFrame();
kf1.setKlantenBindingRef(klantenBindingRef);
kf1.setKlantRef(klantref);
}
public void setKlantenBindingRef(Klantenbinding klantenBindingRef){
this.klantenBindingRef = klantenBindingRef;
}
public void setDeKlant(Klant klantref){
this.klantref = klantref;
}
}
最后是客户的课程:
public class Klant {
private String naam;
public Klant(String naam) {
this.naam = naam;
}
public String getNaam(){
return naam;
}
public void setNaam(String naam){
this.naam = naam;
}
}
答案 0 :(得分:3)
您的代码不会忘记任何事情。只是你创建了一个新的空(!)ArrayList来显示在你的菜单中:
klantenBindingRef = new Klantenbinding();
^^^
System.out.println(klantenBindingRef.toString());
您需要使用之前初始化的相同对象实例...
另一个(不太好)选项是使用静态ArrayList
protected static List<Klant> alleKlanten = new ArrayList<Klant> ();
顺便说一下:你的setAlleKlanten
函数很危险:它确实有可能让你的列表忘记所有内容(因为它只是替换列表中已存在的所有内容)