向 JTable 添加一行
Adding a row to JTable
我正在尝试为文件名、大小等使用 JTable 构建一个文件浏览器。
但是当我尝试在 JTable 中添加一行时,swing 崩溃了。有人可以告诉我,我做错了什么吗?
谢谢。
怎么了?
我怀疑 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)
使用上面的模型实例。
我正在尝试为文件名、大小等使用 JTable 构建一个文件浏览器。 但是当我尝试在 JTable 中添加一行时,swing 崩溃了。有人可以告诉我,我做错了什么吗?
谢谢。
怎么了?
我怀疑 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)
使用上面的模型实例。