向 JTable 添加一行

Adding a row to JTable

我正在尝试为文件名、大小等使用 JTable 构建一个文件浏览器。 但是当我尝试在 JTable 中添加一行时,swing 崩溃了。有人可以告诉我,我做错了什么吗?

谢谢。

Source code

怎么了?
我怀疑 TableModel 没有列 - 添加到 table 的 ColumnModel 但没有添加到 TableModel 的列。至少将其列数设置为 4。

我还强烈建议在创建 table 之前创建模型 (DefaultTableModel),这样它就可以用于创建 table - 无需向 [= 添加列29=]。更好地使用自己的模型,扩展 AbstractTableModel - 提供更好的控制(主要用于非平凡的情况)。


自己模型的示例(最小):

class FileInfoModel extends AbstractTableModel {
    private final String[] columns = {"", "Name", "Size", "Date"};

    private final List<FileInfo> data = new ArrayList<>();

    @Override
    public int getColumnCount() {
        return columns.length;
    }        

    @Override
    public String getColumnName(int col) {
        return columns[col];
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int row, int col) {
        FileInfo info = data.get(row);
        switch (col) {
            case 0: return info.getFileType();
            case 1: return info.getFileName();
            case 2: return info.getFileSize();
            case 3: return info.getLastModified();
            default: throw new IllegalArgumentException("col: " + col);
        }
    }

    public void addInfo(FileInfo info) {
        if (data.add(info)) {
            var row = data.size() - 1;
            fireTableRowsInserted(row, row);
        }
    }
}

不需要扩展 table,只需new JTable(model)使用上面的模型实例。