在java中保留对话框的数据

时间:2012-11-09 10:51:55

标签: java swing jtable jbutton jdialog

if(e.getActionCommand().equals("save to file"))
    {
        System.out.println("save is pressed");
        StringBuffer fileContent = new StringBuffer();
        TableModel tModel = m_table.getModel();
        for (int i = 1; i < tModel.getRowCount(); i++) 
        {
         for(int j=0;j<tModel.getColumnCount();j++)
         {
            Object cellValue = tModel.getValueAt(i, j);
            // ... continue to read each cell in a row
            fileContent.append(cellValue);
            // ... continue to append each cell value
            fileContent.append(" ");
         }
         fileContent.append("\n");
        }
        FileWriter fileWriter;
        try {
            fileWriter = new FileWriter(new File("data.txt"));
            fileWriter.write(fileContent.toString());
            fileWriter.flush();
            fileWriter.close();
            }
        catch (IOException e1) 
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

我创建了一个JDialog,其中有一个表格。我可以通过单击按钮将表数据保存到文件中,但我想要做的是将数据保存在表中,以便在下次运行程序时,该数据可用并显示在表中按下确认按钮时。虽然我读到了Java持久性和Java序列化概念,但我并不清楚哪种技术适合以及如何使用这个问题。

3 个答案:

答案 0 :(得分:3)

请考虑使用TableModel,例如herejava.util.Preferences,仅引用here来保存javax.jnlp.PersistenceService数据。

答案 1 :(得分:1)

这取决于您的申请。最简单快捷的方法是对象序列化。您可以将对象保存到文件中并再次加载。您可以使用保存表数据的对象执行此操作。有很多教程可供选择。

您可以通过将对象转换为人类可读的对象(如XML或JSON)并将其另存为文件来扩展序列化的概念。这样做的好处是可以在Java程序以外的地方使用导出的数据。用于编组XML的框架是JAXB。还有很多教程。

最后,您可以使用SQL数据库。数据库将是最高效的替代方案。一个很好的框架,用于SQL in Hibernate中的持久化。它主要用于需要快速数据存储后端的大型业务应用程序。因为你必须为那个运行SQL服务器。还有很多教程可用。

我想对于你的情况,第一种选择将是最好的,因为它快速而简单。 SQL会有点矫枉过正; - )

答案 2 :(得分:1)

如果您无权访问数据库(本地或服务器),最好的方法可能是使用序列化。

考虑使用具体的类来填充JTable。因此,要保存数据,您只需要使此类实现Serializable,然后使用ObjectOutputStream将其写入文件。然后在以后检索它时使用ObjectInputStream

我真的不记得JTable如何使用数据,但您可能必须创建一个自定义的模型类,它可以从AbstractTableModel开始,并且包含数据,无论是在数组中还是在数组中一个List。但最好使用List,因为它更易于使用且易于使用。因此,您可以直接序列化List,并在下次运行程序时检索。