" Bericht" -objects(dutch for messages,包含字符串和两个日期)的单独类文件的一部分:
private ArrayList<Bericht> lijst = new ArrayList<>(); //
//constructor for a new object:
public Bericht(String bericht, Date startDag, Date eindDag) {
this.bericht = bericht;
this.startDag = startDag;
this.eindDag = eindDag;
// System.out.println(""+lijst.size())// prints always a "0"
lijst.add(this);
// System.out.println(""+lijst.size())//is always one
}
在我的main方法的某个地方,我从这个类创建新对象:
Bericht message = new Bericht(berichtVak.getText(), calendar1.getDate(), calendar2.getDate());
message.printBerichten(berichtTextArea); //this method prints the String from each Bericht- object in the textarea
方法&#34; printberichten&#34;迭代ArrayList并打印所有消息
public void printBerichten(JTextArea jta) {
StringBuffer bfr = new StringBuffer();
for (Bericht msg : lijst) {
bfr.append(msg.getBericht()); //this getter method returns the string
}
jta.setText(bfr.toString());
}
getBericht getter方法:
public String getBericht() {
return bericht;
}
因此,如果我创建一个新对象,我以前的所有对象都应该显示在textArea中,但似乎我只创建了一个类的实例。
命令之前和之后&#34; lijst.add(this)&#34;我添加了一个System.out.println来检查Arraylist的大小,一个返回0,另一个返回&#34; 1&#34;。
答案 0 :(得分:1)
根据您的期望,您需要lijst是静态的:
private static ArrayList<Bericht> lijst = new ArrayList<>(); //
printBerichten也可以是静态的,因为它不访问任何成员变量:
public static void printBerichten(JTextArea jta) {
通过使lijst静态化,Bericht的每个实例将在构造时添加到单个列表中。当lijist不是静态的时,Bericht的每个实例都有自己的列表,只有单个实例会被添加到该列表中。
答案 1 :(得分:0)
make lijst static:
private ArrayList<Bericht> lijst = new ArrayList<>(); //
public Bericht(String bericht, Date startDag, Date eindDag) {
this.bericht = bericht;
this.startDag = startDag;
this.eindDag = eindDag;
// System.out.println(""+lijst.size())
lijst.add(this);
// System.out.println(""+lijst.size())
}