我搜索了很多,并得到了这个Q的一些答案,但其中很多人提到的链接,给404错误。 我想打表是这样的:如何在DefaultTableModel/JTable中合并单元格?
有没有在Java中的任何方法吗?
我搜索了很多,并得到了这个Q的一些答案,但其中很多人提到的链接,给404错误。 我想打表是这样的:如何在DefaultTableModel/JTable中合并单元格?
有没有在Java中的任何方法吗?
MultiSpanCellTableExample演示如何通过创建自定义TableUI
来合并单元格。似乎有在该例子中,导致StackOverflowError
,至少在爪哇6.要解决这个问题,内AttributiveCellTableModel.setDataVector()
一个问题取代:
setColumnIdentifiers(columnNames);
与:
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));
}
问题是setColumnIdentifiers
调用setDataVector
因此触发StackOverflowError
。一旦固定,这是例子看起来的样子:
还有来自JIDE一个现成的解决方案,可惜它不是免费的。这里是一个例子CellSpanTable
:
我一直在使用JIDE多年。 API非常丰富,也就是说,如果你负担得起。我相信他们可能有一个学生版。不确定。做一个谷歌的jidesoft。 –
MultiCellSpanTableExample是好的,但它有一个小问题,可以成为一个巨大的问题,如果你的表中有太多的列。正如您在tenorsax给出的example中看到的,显然每个表格列的宽度都有一个额外的像素。这些额外的像素加起来,使每列比最后一列更偏移。
我可以简单地解决这个问题通过更换行:
cellFrame.width = aColumn.getWidth() + columnMargin;
有:
cellFrame.width = aColumn.getWidth() + columnMargin - 1;
我知道没有人问过,但我希望这可以帮助别人。 :)
谢谢!在发现问题之前找到修复是最好的! – Xerus
在我的一个项目中,我使用[即SpanTable](https://code.google.com/p/spantable/source/browse/SpanTable/src/main/java/spantable/?r=b5aa2f0d7bc6e0ced427562dcc22396b41963948 )。在另一个我使用组头[来自SO回答](http://stackoverflow.com/a/11666046/2894369)。试试看。 – alex2410
你应该检查[this](http://www.java3z.com/cwbwebhome/article/article5/swing_example/JTableExamples4.html)和/或[this](http://www.java2s.com/Code/Java /Swing-Components/MultiSpanCellTableExample.htm)。 – Qiu
@Qui在线程“主”异常java.lang.StackOverflowError –