嘿,伙计们,我正在编写一个程序,向用户显示一个JTable,这样他们就可以在表格窗口中输入一些数据。问题是,我不知道如何保存任何数据,所以当应用程序再次运行时,数据可以重新打开。我希望在应用程序关闭时自动保存数据,但如果需要,我很乐意使用按钮。
我不知道如何保存任何数据,
从JTable API(以及所有Swing组件)中,您将看到:
警告:此类的序列化对象将与未来的Swing版本不兼容....从1.4开始,java.beans包中增加了对所有JavaBeans长期存储的支持。请参见XMLEncoder。
下面是一个使用 XML 编码器的示例:
// Following code is a more complete version of:
// http://stackoverflow.com/q/26250939/131872
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;
public class DefaultTableModelPersistenceDelegateTest
{
private File file = new File("TableModel.xml");
private final JTextArea textArea = new JTextArea();
private final String[] columnNames = {"Column1", "Column2"};
private final Object[][] data =
{
{"aaa", new Integer(1)},
{"bbb\u2600", new Integer(2)}
};
private DefaultTableModel model = new DefaultTableModel(data, columnNames);
private final JTable table = new JTable(model);
public JComponent makeUI()
{
model.setColumnCount(5);
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
sp.setResizeWeight(.3);
sp.setTopComponent(new JScrollPane(table));
sp.setBottomComponent(new JScrollPane(textArea));
JPanel p = new JPanel();
p.add(new JButton(new AbstractAction("XMLEncoder")
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
XMLEncoder xe = new XMLEncoder(os);
xe.setPersistenceDelegate(DefaultTableModel.class, new DefaultTableModelPersistenceDelegate());
xe.writeObject(model);
xe.close();
Reader r = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
textArea.read(r, null);
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}));
p.add(new JButton(new AbstractAction("XMLDecoder")
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
InputStream is = new BufferedInputStream( new FileInputStream( file ));
XMLDecoder xd = new XMLDecoder(is);
model = (DefaultTableModel)xd.readObject();
table.setModel(model);
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}));
p.add(new JButton(new AbstractAction("clear")
{
@Override
public void actionPerformed(ActionEvent e)
{
model = new DefaultTableModel();
table.setModel(model);
}
}));
JPanel pnl = new JPanel(new BorderLayout());
pnl.add(sp);
pnl.add(p, BorderLayout.SOUTH);
return pnl;
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override public void run()
{
createAndShowGUI();
}
});
}
public static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new DefaultTableModelPersistenceDelegateTest().makeUI());
f.setSize(420, 340);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
// See following link for more information on Using XMLEncoder:
// http://www.oracle.com/technetwork/java/persistence4-140124.html
class DefaultTableModelPersistenceDelegate extends DefaultPersistenceDelegate
{
// Initially creates an empty DefaultTableModel. The columns are created
// and finally each row of data is added to the model.
@Override
protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder encoder)
{
DefaultTableModel model= (DefaultTableModel)oldInstance;
// Create XML to restore the column names
Vector<String> columnNames = new Vector<String>(model.getColumnCount());
for (int i = 0; i < model.getColumnCount(); i++)
{
columnNames.add( model.getColumnName(i) );
}
Object[] columnNamesData = new Object[] { columnNames };
encoder.writeStatement(new Statement(oldInstance, "setColumnIdentifiers", columnNamesData));
// Create XML to restore row data
Vector row = model.getDataVector();
for (int i = 0; i < model.getRowCount(); i++)
{
Object[] rowData = new Object[] { row.get(i) };
encoder.writeStatement(new Statement(oldInstance, "addRow", rowData));
}
}
}
问题内容: 我只是想到了一种不那么直截了当的方法: 我可以以某种方式将JAR资源列表转换为内部JAR URL列表,然后可以使用openConnection()打开它。 问题答案: 您使用JarFile打开一个Jar文件。有了它,您可以使用’getEntry(String name)’或’entires’来获取ZipEntry或JarEntry(它们可以看作同一东西)。收到条目后,可以通过调用’ J
问题内容: 我最近开始使用Java,当我需要从jTable开始创建excel文件时,我遇到了apache poi库的一些问题。 我已经阅读了许多线程并提出了一些行不通的代码(即使这是非常简单的东西,并且有很多示例,这使我看起来更加愚蠢),我希望有人可以帮助我。 所以这是问题: a) 为什么要编写Excel文件的for循环不填充每个单元格?(excel文件中唯一包含数据的行是第六行,这也让我想知道为
本文向大家介绍javascript结合ajax读取txt文件内容,包括了javascript结合ajax读取txt文件内容的使用技巧和注意事项,需要的朋友参考一下 代码很简洁,这里就不多废话了,直接上源码 html代码 javascript代码 请求的文件为read.txt 内容随便填写
本文向大家介绍JAVA实现读取txt文件内容的方法,包括了JAVA实现读取txt文件内容的方法的使用技巧和注意事项,需要的朋友参考一下 通常,我们可以直接通过文件流来读取txt文件的内容,但有时可能会出现乱码!此时只要设置一下文件字符编码即可。 读取文件效果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我想读一本书的内容。存储在s3存储桶中的txt文件。 我试过: 但是我得到的s3file对象不包含文件的内容。 你知道该怎么做吗?
问题内容: 我会尽量保持清楚,但如果我的问题不完美,请原谅我。我有一个包含多行数据的txt文件。例: 123拉尔夫·玻色20000 200 1 2 256 ed shane 30000 100 2 4 … 我需要按顺序读取每一行,并将其传递回单独类中的方法进行处理。我知道如何通过使用StringTokenizer将每一行分解为元素。 但是,我不确定如何一次读取一行,将元素传递回另一类,然后在完成处