簡體   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