简体   繁体   English

向 JTable 添加一行

[英]Adding a row to JTable

I'm trying tobuild a file browser using JTable for filename, size, etc. But swing crash when i try add a row in JTable.我正在尝试使用 JTable 作为文件名、大小等来构建文件浏览器。但是当我尝试在 JTable 中添加一行时,swing 崩溃。 Can someone tell me, what i'm doing wrong?有人可以告诉我,我做错了什么吗?

Thanks.谢谢。

Source code 源代码

What is wrong?怎么了?
I suspect the TableModel has no columns - columns where added to the ColumnModel of the table but not to the TableModel .我怀疑TableModel没有列 - 添加到表的ColumnModel但没有添加到TableModel的列。 At least set its column count to 4.至少将其列数设置为 4。

I also strongly suggest creating the model ( DefaultTableModel ) before creating the table, so it can be used to create the table - no need to add columns to table.我还强烈建议在创建表之前创建 model ( DefaultTableModel ),因此它可用于创建表 - 无需向表中添加列。 Even better use an own model, extending AbstractTableModel - gives better control (mostly for non trivial cases).更好地使用自己的 model,扩展AbstractTableModel - 提供更好的控制(主要用于非平凡的情况)。


Example (minimal) for own model:自己的 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);
        }
    }
}

no need for an extended table, just new JTable(model) using above model instance.不需要扩展表,只需使用上述 model 实例的new JTable(model)

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

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