我一直致力于一个侧面项目,我有一个JTable,需要将其内容写入文本文件。它是JFrame的一部分,其中有一个"更新"按钮,用户应该单击以更新文本文件。但是,当我调用更新电子表格的方法时,它创建的所有内容都是空白文件。
以下是表格型号:
spreadsheet.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false},
{"", "0", false, false}
},
new String [] {
"Descripton", "Amount", "Income?", "Expense?"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Integer.class, java.lang.Boolean.class, java.lang.Boolean.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jScrollPane1.setViewportView(spreadsheet);
以下是将表格转换为文本文件的方法:
private void updtSSActionPerformed(java.awt.event.ActionEvent evt) {
try {
StringBuffer fileContent = new StringBuffer();
TableModel tModel = spreadsheet.getModel();
for (int i = 0; i < tModel.getRowCount(); i++) {
Object cellValue = tModel.getValueAt(i, 0);
fileContent.append(cellValue);
}
FileWriter fileWriter = new FileWriter(new File("data.txt"));
fileWriter.write(fileContent.toString());
fileWriter.flush();
fileWriter.close();
} catch (IOException ex) {
Logger.getLogger(Spreadsheet.class.getName()).log(Level.SEVERE, null, ex);
}
}
(我从这里获得了上述方法:https://community.oracle.com/message/5235252)
我该如何解决这个问题?我对Java仍然有些新意,因此非常感谢任何建议。
答案 0 :(得分:1)
我认为问题可能是你只获得了表模型中第一列的值,而这似乎是空的String
s。您需要遍历表模型中每一行的每一列,以创建例如然后您可以将String
或StringBuffer
写入您的文件。
您可以在表模型上调用getColumnCount()
以获取列数,然后在已创建的for循环中,执行另一个循环,遍历每行的列,组合String
您追加到StringBuffer
fileContent
的{{1}},或者您可能希望在每行后加StringBuffer
。
如果表格模型变大,您可能需要考虑动态写入文件,而不是使用\\n
在内存中进行汇编。