How to merge cell in DefaultTableModel/JTable?

Nikhil Chilwant picture Nikhil Chilwant · Feb 18, 2014 · Viewed 19.1k times · Source

I searched a lot and got some answers for this Q. but many of them referred to links which give 404 error. I want to make table like this:

No. of cells to be merged is not fixed

Is there any method in java for this?

Answer

tenorsax picture tenorsax · Feb 24, 2014

MultiSpanCellTableExample demonstrates how to merge cells by creating a custom TableUI. There seem to be a problem in this example that causes StackOverflowError, at least in Java 6. To fix this, inside AttributiveCellTableModel.setDataVector() replace:

setColumnIdentifiers(columnNames);

with:

this.columnIdentifiers = columnNames;

IE:

public void setDataVector(Vector newData, Vector columnNames) {
    if (newData == null)
        throw new IllegalArgumentException(
                "setDataVector() - Null parameter");
    dataVector = new Vector(0);
    // setColumnIdentifiers(columnNames);
    this.columnIdentifiers = columnNames;
    dataVector = newData;

    cellAtt = new DefaultCellAttribute(dataVector.size(),
            columnIdentifiers.size());

    newRowsAdded(new TableModelEvent(this, 0, getRowCount() - 1,
            TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
}

The problem is that setColumnIdentifiers calls into setDataVector hence triggering the StackOverflowError. Once fixed, this is how the example looks like:

enter image description here

There is also a ready solution from JIDE, unfortunately it is not free. Here is for example CellSpanTable:

enter image description here