cómo configurar el color de fondo del encabezado de JTable cuando se selecciona una celda

Puedo configurar con éxito el color de fondo de todo el encabezado de JTable.

en general, esto se ve así:

m_table.getTableHeader().setBackground(new Color(205,209,235));

donde me quedo atascado es cuando se selecciona una celda, tengo un ListSelectionListener...

Quiero poner el fondo de las columnas actualmente seleccionadas en el encabezado a otro color. (no el fondo de la celda actual, que es bastante fácil)

actualizar:

Creé esto:

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import com.ee.common.StringUtil;

public class myHeaderRenderer extends DefaultTableCellRenderer 
{
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column)
    {

        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if( table != null ) 
        {
            if ( isSelected ) {
                table.getTableHeader().setBackground(Color.orange);
            }
            else {
                table.getTableHeader().setBackground(new Color(205,209,235));
            }
        }
        return null;
    }

}

y trato de configurarlo así:

class WorksheetTable extends JTable implements EEObjectSource, EEObjectTarget {
    public WorksheetTable(WorksheetTableModel model) {
        super(model);
        setTableHeader(new EditableJTableHeader(getColumnModel()));
    }
    @Override
    public void createDefaultColumnsFromModel() {
        super.createDefaultColumnsFromModel();
        setTableHeader(new EditableJTableHeader(getColumnModel()));
        getTableHeader().setToolTipText("Double Click to Edit, Right Click for more options");
        for (int i=0; i<getColumnCount(); i++) {
            getColumnModel().getColumn(i).setPreferredWidth(150);
            getColumnModel().getColumn(i).setWidth(150);
            getColumnModel().getColumn(i).setHeaderRenderer(new myHeaderRenderer());
        }

Obtengo punteros nulos en tiempo de ejecución cuando la tabla pinta por primera vez... falta algo tonto...

preguntado el 10 de marzo de 12 a las 13:03

1 Respuestas

Puedes ir en una JTable:

 jTable.getColumModel().getColumn(columnIndex).setHeaderRenderer()

Y puede proporcionar su propio renderizador de celdas para renderizar encabezados.

respondido 10 mar '12, 13:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.