[英]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.谢谢。
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.