2011-08-16 28 views
4

我是Swing的新手,今天一直在與JTable組件拼搏。因爲我試圖製作一張有點奇特的表格,所以我一直無法找到我正在尋找的具體答案。JTable頭和間隔行

我想在表格最頂部有一個「組」標題。這意味着3或4行跨越整個表格,並對各個列進行「分組」,基本上對它們進行分區。

實施例(原諒眼睛疲勞):

////////////////////////////////ANIMALS////////////////////////// 
/////////Mammals///////////////////////Rodents/////////////////// 
////People/////Dogs//////////Rats/////Rodents of Unusual Size//// 

凡斜線( 「/」)表示空白。標題爲「動物」的第一個標題指的是表格中的所有列。第二個標題向下分區ANIMALS,等等。在第三個和最後一個標題後,我們到達了實際的表格,其中每行將有4列,每種類型的動物一列。

顯然這是一個例子,可能是一個壞的例子,但這就是我所說的「分區標題」。

我的問題: 我沒有看到JTableHeader上和TableColumnModel中如何支持此功能。如果他們這樣做,有人可以推動我朝着正確的方向前進。如果他們不這樣做,這肯定不會是Swing應用程序第一次需要這樣的東西。任何人都知道的第三方組件?

另外,我希望能夠將「Spacer」或Spanning行撒在我的表中,代表一組行。這些間隔符將存在於表內部(不是像標題那樣),而是跨越每一列並具有單個標籤,表示由後續行表示的組的名稱。同樣,我沒有看到Swing支持這個,有什麼想法?

謝謝,我爲真正可怕的示例/繪圖道歉。

回答

1

默認情況下,JTable中只有一行標題(並且它不是JTable的一行,而是JTableHeader)。無論如何,你可以實現一個TableCellRenderer,它顯示前n個非標題行,看起來像是標題。

的步驟是更礦石少下列:

  1. 實現的TableCellRenderer顯示一般負責所需的行的JTable中的細胞像頭的細胞

像:

public Component getTableCellRendererComponent(JTable table, Object value, 
    boolean isSelected, boolean hasFocus, int row, int column){ 

    this.setOpaque(true); 
    TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); 
    return renderer.getTableCellRendererComponent(table, value, isSelected, 
      hasFocus, row, column); 
} 
  1. 擴展JTable並實現以下方法以返回在desidered單元格渲染器:

    public TableCellRenderer getCellRenderer(int row, int column){} 
    
符合你的要求

反正沒有解決另一個問題:一個JTable有柱固定數量的,所以你必須找到一種解決方法才達到這一結果。

+0

對於渲染器的影響頭,你會不會使用'table.getTableHeader()。setDefaultRenderer()'? – trashgod

+0

看起來像野生猜測我 - 或者你真的嘗試過;-) – kleopatra

+0

@kleopatra:我嘗試了一些非常相似的東西。 – Heisenbug

1

核心Swing不支持單元(包括行/列)分組或分割,無論是頭還是表本身。通過設計的JTable是而不是通用網格。試圖調整一些類似網格的行爲和視覺效果將會影響其設計。可以完成,但這不是微不足道的。 @Trashgod指出了其中的一些戰鬥(他們是否仍然有效?他們看起來像舊式的第一代馴服示例?)。 A JIDE是支持它的商業產品(免責聲明:從未在生產中使用它:-)

+0

不正式的選民,你的理由是什麼? – kleopatra