2010-07-23 45 views
11

有什麼方法可以在JTable中創建多個列標題?我的意思是,通常只有一行,但我需要其中兩個具有相同的格式(如標題),並將其中一個標題的某些單元格組合在一起。Java Swing - JTable中有多個列標題?

我需要的是這樣的:

 
Header0 |   Header123   | Header4 
Header0 | Header1 | Header2 | Header3 | Header4 

有什麼辦法?

回答

1

您可以擴展BasicTableHeaderUI並編寫您自己的paint方法實現,您可以在其中繪製任何類型的頭文件。 此更改後默認標題UI用以下命令table.getTableHeader().setUI(MyTableHeaderUI)

5

Groupable Header示例是一些可能幫助您的舊代碼。

+0

我以前用過這個,真的很喜歡它。像魅力一樣工作 – 2011-06-23 15:43:17

6

Nick Meyer非常感謝您的回覆,而您地址中的內容有點過時。我使用jre 1.7來運行它,它沒有像預期的那樣工作,但它可以被修改以正確工作。 我做的改變如下

/* 
* add these code in GroupableTableHeader 
*/ 

    public void updateUI(){ 
//  setUI(this.getUI()); 

     TableCellRenderer renderer = getDefaultRenderer(); 
     if (renderer instanceof Component) { 
      SwingUtilities.updateComponentTreeUI((Component)renderer); 
     } 
    } 

/* 
* add these code in GroupableTableHeaderUI in 2 places, you must know where 
*/ 
     if (renderer == null) { 
      renderer = header.getDefaultRenderer(); 
     } 

/* 
* change the getSize method in ColumnGroup 
*/ 

    public Dimension getSize(JTable table) { 
    Component comp = renderer.getTableCellRendererComponent(
     table, getHeaderValue(), false, false,-1, -1); 
    int height = comp.getPreferredSize().height; 
    int width = 0; 
    Enumeration en = v.elements(); 
    while (en.hasMoreElements()) { 
     Object obj = en.nextElement(); 
     if (obj instanceof TableColumn) { 
     TableColumn aColumn = (TableColumn)obj; 
     width += aColumn.getWidth(); 
//  width += margin; 
     } else { 
     width += ((ColumnGroup)obj).getSize(table).width; 
     } 
    } 
    return new Dimension(width, height); 
    } 

和最後的結果。 enter image description here