Nik*_*ant 13 java swing jtable tablecellrenderer jtableheader
我搜索了很多并得到了这个Q的答案.但是他们中的许多人都提到了404错误的链接.我想像这样制作表格:

java中有没有这方面的方法?
ten*_*ica 17
MultiSpanCellTableExample演示了如何通过创建自定义来合并单元格TableUI.在这个例子中似乎有一个问题导致StackOverflowError,至少在Java 6中.要解决这个问题,请在内部AttributiveCellTableModel.setDataVector()替换:
setColumnIdentifiers(columnNames);
Run Code Online (Sandbox Code Playgroud)
有:
this.columnIdentifiers = columnNames;
Run Code Online (Sandbox Code Playgroud)
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));
}
Run Code Online (Sandbox Code Playgroud)
问题是setColumnIdentifiers调用setDataVector因此触发了StackOverflowError.一旦修复,这就是示例的样子:

JIDE还有一个现成的解决方案,不幸的是它不是免费的.这是例如CellSpanTable:

MultiCellSpanTableExample很好,但它有一个小问题,如果你的表有太多的列,可能会成为一个大问题.正如您在tenorsax给出的示例中所看到的,显然每个表列的宽度都有一个额外的像素.这些额外的像素加起来,使每列比上一列更多.
我可以通过替换线来解决这个问题:
cellFrame.width = aColumn.getWidth() + columnMargin;
Run Code Online (Sandbox Code Playgroud)
有:
cellFrame.width = aColumn.getWidth() + columnMargin - 1;
Run Code Online (Sandbox Code Playgroud)
我知道没有人问,但我希望这有助于某人.:)
| 归档时间: |
|
| 查看次数: |
16995 次 |
| 最近记录: |