2010-07-23 15 views
11

¿Hay alguna forma de crear varios encabezados de columna en un JTable? Quiero decir, normalmente solo hay una fila, pero necesito dos con el mismo formato (en forma de encabezado) y combino algunas celdas de uno de esos encabezados.Java Swing: ¿encabezados de columna múltiples en una JTable?

necesito algo como esto:

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

¿Hay alguna forma?

Respuesta

1

puede ampliar BasicTableHeaderUI y escribir su propia implementación de método de pintura, en la que puede dibujar cualquier tipo de encabezado. después de este cambio Interfaz de usuario del encabezado predeterminado con el siguiente comando table.getTableHeader().setUI(MyTableHeaderUI)

5

El ejemplo Groupable Header es un código antiguo que podría ayudarlo.

+0

Lo he usado antes y realmente me gustó. trabajado como un encanto –

6

Nick Meyer gracias por su amable respuesta, mientras que el contenido de su dirección está un poco desactualizado. Lo ejecuto con jre 1.7 y no funcionó como se esperaba, pero se puede modificar para que funcione correctamente. el alter hice son los siguientes

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

y la finalmente resultados. enter image description here

Cuestiones relacionadas