2010-07-23 13 views
11

Esiste un modo per creare intestazioni di colonna multiple in un JTable? Voglio dire, normalmente c'è solo una riga, ma ne ho bisogno due con lo stesso formato (simile a un'intestazione) e combinare alcune celle di una di quelle intestazioni.Java Swing - Intestazioni multiple di colonne in una tabella J?

ho bisogno di qualcosa di simile:

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

C'è un modo?

risposta

1

è possibile estendere BasicTableHeaderUI e scrivere la propria implementazione del metodo paint, in cui è possibile disegnare qualsiasi tipo di intestazione. dopo questa modifica UI intestazione predefinita con il seguente comando table.getTableHeader().setUI(MyTableHeaderUI)

5

L'esempio Groupable Header è un vecchio codice che potrebbe essere in grado di aiutarti.

+0

Ho già usato questo e mi è piaciuto molto. ha funzionato come un fascino –

6

Nick Meyer, grazie per la gentile risposta, mentre il contenuto del vostro indirizzo è un po 'antiquato. lo eseguo con jre 1.7 e non funziona come previsto, ma può essere modificato per funzionare correttamente. alter ho fatto sono come seguono

/* 
* 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); 
    } 

e finally risultati. enter image description here

Problemi correlati