我搜索了很多,並得到了這個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 –