繁体   English   中英

向 JTable 添加一行

[英]Adding a row to JTable

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

谢谢。

源代码

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

我还强烈建议在创建表之前创建 model ( DefaultTableModel ),因此它可用于创建表 - 无需向表中添加列。 更好地使用自己的 model,扩展AbstractTableModel - 提供更好的控制(主要用于非平凡的情况)。


自己的 model 示例(最小):

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);
        }
    }
}

不需要扩展表,只需使用上述 model 实例的new JTable(model)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM