我在JTable中加载了一个文本文件,我希望我在JTable中做出的更改也可以在文本文件中生成,我该怎么做?

时间:2014-02-15 15:46:36

标签: java swing jtable

String[] columns = {"nume", "compozitie", "indicatii", "contraindicatii", "administrare", "pret", "compensabil"};

Object[][] data = null;
try {
    File file = new File("medicamente.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    BufferedReader reader = new BufferedReader(new FileReader("medicamente.txt"));
    int lines = 0;
    while (reader.readLine() != null) {
        lines++;
    }
    reader.close();
    data = new Object[lines][];
    String line;
    int numLines = 0;
    while ((line = bufferedReader.readLine()) != null) {
        data[numLines] = line.split(",");
        numLines++;
    }
    fileReader.close();

} catch (IOException e) {
    e.printStackTrace();
}

final DefaultTableModel model = new DefaultTableModel(data, columns) {
    @Override
    public Class getColumnClass(int column) {
        Class returnValue;
        if ((column >= 0) && (column < getColumnCount())) {
            returnValue = getValueAt(0, column).getClass();
        } else {
            returnValue = Object.class;
        }
        return returnValue;
    }
};

JTable table = new JTable(model) {
    public boolean isCellEditable(int row, int column) {
        switch (column) {
            case 5:
                return true;
            default:
                return false;
        }
    }
};

final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(1000, 500));
mainPanel.add(scrollPane);
scrollPane.setBounds(0, 240, 995, 510);

正如您所看到的,我将其中一列编辑为可编辑,其他列则不可编辑。我在某处读到,唯一的解决方案是清除文本文件,然后在文本文件中加载修改后的JTable。这里最好的选择是什么?

1 个答案:

答案 0 :(得分:0)

I read somewhere that the only solution is to clear the text file and than load the modified JTable in the text file.

鉴于您将数据存储在文本文件中,这是正确的。

您可能需要查看Table Cell Listener。它会告诉您何时数据库中的数据发生了变化。然后,您可以调用代码来重新创建文本文件。

如果您不想使用此类,那么您也可以使用TableModelListener来实现此目的。阅读这两种方法之间差异的链接。