DefaultTableModel addRow 方法以以下格式添加行:column_name = column_value 而不仅仅是 column_value

DefaultTableModel addRow method adds row in format: column_name = column_value instead of just column_value

我在 JTable 中尝试添加新行时遇到问题。我的 JTable 使用 DefaultTableModel,这里是我用来添加新行的代码:

AddDialog diag = new AddDialog(MainWindow.getInstance(),"Add Entity",true,tab);
diag.setVisible(true);
if(diag.isSaved()) {
    entity = diag.getEntity();
    table = diag.getTableModel();
    table.getEntities().add(entity);
    if(tab instanceof TablePreview) {
        tablePreview = (TablePreview)tab;
        tableModel = (DefaultTableModel) (tablePreview.getTableView().getModel());
        Object[] newRow = new Object[entity.getAttributes().size()];
        int i=0;
        for (Entry<String, Object> entry : entity.getAttributes().entrySet()) { 
            newRow[i++]=entry;
        }
        tableModel.addRow(newRow);

    }else if(tab instanceof ChildTablePreview) {
        System.out.println("Tab is instanceof ChildTablePreview");
    }
}else {
    System.out.println("Entity not saved!");
}

diag 是扩展 JDialogAddDialog 的实例,当我填写对话框的字段并单击保存时,它会创建一个 Entity class,我想要添加到 table 作为新行。逻辑工作正常,但是当行被插入到 table 时,出于某种原因 table 看起来像这样:

如果有人知道我该如何解决这个问题,我将不胜感激!

您需要使用 custom cell renderer in your JTable

数据的显示方式取决于列的 class。默认渲染器只是为列中的对象调用 .toString() 函数。如果该列包含一个键值对,它们通常显示为键=值。

您需要使用 TableColumn 方法 setCellRenderer 设置渲染器。您可以将此渲染器定义为仅显示该列中对象的值。