我正在使用XStream将我的对象序列化/反序列化为文件。我有非常基本的JFrame窗口和一些按钮,例如“添加”,“显示表”和“从文件加载”。 “加载”将XML文件反序列化回我的ArrayList<Person>
对象。 “Add”将一个Object添加到ArrayList。问题是,当我点击“添加”然后按“显示表格”时,它会按照计划显示一行。但是当我将其保存到文件时,重新启动应用程序,然后加载&amp;显示表 - 它什么都没显示。当我单击“添加”并再次“显示表格”仍为零时,即使ArrayList.size()
返回的int大于0.
代码位,加载功能:
public void Load(){
XStream xstream = new XStream(new StaxDriver());
xstream.alias("database", Baza.class);
xstream.alias("Person", Person.class);
try{
FileInputStream k = new FileInputStream("src/swing/project/database.xml");
baza = (Baza)xstream.fromXML(k);
baza.showAll();
showPerson(baza.people.get(0));
} catch(FileNotFoundException e){
e.printStackTrace();
}
System.out.println("Loaded! " + baza.getSize());
}
具有表初始化函数的JScrollPane:
public JScrollPane srodekTabela(){
TableM modelik = new TableM(model.getBaza().people); //
JTable tabela = new JTable(modelik);
tabela.setPreferredScrollableViewportSize(new Dimension(500, 500));
tabela.setFillsViewportHeight(true);
tabela.setModel(modelik);
JScrollPane scroll = new JScrollPane(tabela);
scroll.setOpaque(true);
return scroll;
}
然后,当按下“显示表格”按钮时,我只删除所有其他JLabel,重新验证&amp;重新绘制JScrollPane,它通常添加到JFrame。
public void pokazTabele(){
okno.remove(srodekDodaj);
okno.remove(srodekZmien);
okno.remove(srodekUsun);
okno.remove(srodekTabela);
okno.add(srodekTabela, BorderLayout.CENTER);
okno.revalidate();
okno.repaint();
}
我希望我提供所有信息。不知道为什么它不能用于预加载的ArrayList,并且适用于在运行中创建ArrayList。