【问题标题】:to persist the data of a dialog box in java在java中持久化对话框的数据
【发布时间】:2012-10-29 16:35:17
【问题描述】:
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 序列化概念的信息,但我并不清楚哪种技术适合以及如何用于此问题。

【问题讨论】:

  • 将代码编辑到问题中。使用代码格式。为此,请选择代码并单击{} 按钮。
  • 好的 - 情况越来越好,但请尝试弄清楚如何在问题中使用代码格式。再次阅读我的第一条评论。另外为了尽快获得更好的帮助,请发布SSCCE
  • 好的..我会这样做...我已经发布了将表格数据保存到文件中的代码,但不知道如何检索该数据并在表格中再次显示..如果你有任何想法对我有帮助..
  • “如果你有任何想法” 以下是 3: 1) 正确拼写“you”之类的词。这不是短信。 2) 发布 SSCCE。 3) 回复答案的人比任何其他答案都多 2 票。 @trashgod 提供了很好的建议。
  • 我不知道。谢谢你告诉我。

标签: java swing jtable jbutton jdialog


【解决方案1】:

考虑使用java.util.Preferences 仅保存TableModel 数据,例如herejavax.jnlp.PersistenceService,引用here

【讨论】:

  • 感谢您回复@trashgod
  • 不客气。展示一个孤立的例子有点困难。引用的第一个是游戏;第二个归功于@Andrew Thompson。
【解决方案2】:

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

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

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

我想对于您的情况,第一个替代方案是最好的,因为它既快速又简单。 SQL 会有点矫枉过正;-)

【讨论】:

    【解决方案3】:

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

    考虑使用具体类来填充您的JTable。所以要保存数据,你只需要让这个类实现Serializable,然后使用ObjectOutputStream将它写入一个文件中。然后稍后使用ObjectInputStream 检索它。

    我真的不记得 JTable 是如何处理数据的,但您可能必须创建一个自定义模型类,该类从 AbstractTableModel 中提取,并且将包含数组或 List 中的数据.但最好使用List,因为它更灵活且易于使用。这样你就可以直接序列化List,下次程序运行时检索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多