javaswingjtabledefaulttablemodel

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


I am experiencing a issue while trying to add new row in my JTable. My JTable is using DefaultTableModel, here is the code I use for adding a new row:

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 is instance of AddDialog which extends JDialog, and when I fill in the fields of the dialog and click save it creates an Entity class which I want to add to the table as a new row. The logic works fine, but when the row gets inserted into the table, for some reason table looks like this:

https://i.sstatic.net/qJeuW.png

If anyone has any idea how I can fix this, I would really appreciate the help!


Solution

  • You need to use a custom cell renderer in your JTable.

    How data appears is based on the class of the columns. The default renderer simply calls the .toString() function for the objects in the column. If the column contains a key value pair, its common for these to appear as key=value.

    You need to set the renderer using the TableColumn method setCellRenderer. You can define this renderer to only display the value for the objects in that column.