如何在DefaultTableModel/JTable中合并单元格?
2022-09-04 07:34:19
我搜索了很多,并得到了这个Q的一些答案,但其中许多都提到了给出404错误的链接。我想把桌子做成这样:
Java中有什么方法可以做到这一点吗?
我搜索了很多,并得到了这个Q的一些答案,但其中许多都提到了给出404错误的链接。我想把桌子做成这样:
Java中有什么方法可以做到这一点吗?
MultiSpanCellTableExample 演示了如何通过创建自定义来合并单元格。在这个例子中似乎有一个问题,至少在Java 6中是这样。要解决此问题,请在内部替换:TableUI
StackOverflowError
AttributiveCellTableModel.setDataVector()
setColumnIdentifiers(columnNames);
跟:
this.columnIdentifiers = columnNames;
即:
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));
}
问题是调用,从而触发 .修复后,示例如下所示:setColumnIdentifiers
setDataVector
StackOverflowError
JIDE还有一个现成的解决方案,不幸的是它不是免费的。例如:CellSpanTable
MultiCellSpanTableExample很好,但是它有一个小问题,如果您的表有太多的列,它可能会成为一个巨大的问题。正如您在 tenorsax 给出的示例中看到的那样,显然每个表列的宽度都有一个额外的像素。这些额外的像素加起来,使每列的位移比上一列更多。
我可以通过替换该行来简单地解决此问题:
cellFrame.width = aColumn.getWidth() + columnMargin;
跟:
cellFrame.width = aColumn.getWidth() + columnMargin - 1;
我知道没有人问过,但我希望这对某人有所帮助。:)