2011-10-15 77 views
7

que he probado:¿Cómo puedo cambiar el color de fondo del encabezado de JTable?

table.getTableHeader().setBackground(Color.BLACK); 

no funciona.

EDITAR: Este código no funciona solo en mi proyecto. Trabaja en otros proyectos. Es posible que haya cambiado una propiedad que impide que el color cambie. O tal vez NetBeans tiene alguna propiedad que mantiene los colores predeterminados. Me di cuenta de algo más. El color del encabezado en mi proyecto está brillando de una manera diferente. En los ejemplos donde funciona el cambio de color, veo diferentes gráficos.

EDIT 2: Algo más. Noté que los botones tampoco cambiarán de color. Debe ser algo genérico. Espero que esto ayude. Lamentablemente, SSCCE no funcionará en este caso, porque no puedo volver a crear el problema. Seguramente estoy usando los nombres correctos de los componentes.

+0

Vea también [¿Cómo puedo poner un control en el JTableHeader de una JTable?] (Http://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader -of-a-jtable). – trashgod

+0

Esto no tiene nada que ver con que NetBeans mantenga un cierto color predeterminado y todo tenga que ver con un error en su código, pero con la frase "este código no funciona solo en mi proyecto", y sin ningún código, preferiblemente un sscce, Dudo que ninguno de nosotros pueda darle más ayuda que sugerirle que intente depurar un poco más. Quizás la tabla en la que intenta cambiar el color del encabezado no es el mismo objeto de tabla que se muestra, pero de nuevo sin un código comprensible y preferiblemente compilable, ¿esto es solo un SWAG de mi parte? –

Respuesta

1

Lo resolvió. En NetBeans:

  • Haga clic derecho sobre el nombre del proyecto
  • Propiedades
  • Aplicación - Aplicación de escritorio
  • aspecto y el estilo: seleccione 'Java por defecto' (no funcionó con el sistema por defecto)
  • Recuerde limpiar y reconstruir antes de ejecutar el proyecto

También los gráficos de todo el proyecto cambiaron la apariencia.

+0

Parece que esta opción solo está disponible para proyectos NetBeans de tipo ['Java Desktop Application'] (http://stackoverflow.com/questions/2561480/netbeans-gui-editor-generating-its-own-incomprehensible-code/ 2561540 # 2561540). Considere actualizar la pregunta para incluir la etiqueta [tag: jsr296]. – trashgod

+0

Todavía creo que se puede resolver en código, que puede que no esté estableciendo la propiedad para la referencia correcta. –

+0

Le sugiero que bloquee su proyecto * con el código fuente * y lo cargue en algún lugar, y luego echemos un vistazo. –

11

Funciona para mí. Aquí está mi SSCCE:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableHeaderBackground { 
    public static void main(String[] args) { 
     Integer[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 
     String[] cols = {"A", "B", "C"}; 

     JTable table = new JTable(data, cols); 

     JTableHeader header = table.getTableHeader(); 
     header.setBackground(Color.black); 
     header.setForeground(Color.yellow); 

     JOptionPane.showMessageDialog(null, new JScrollPane(table)); 
    } 
} 

Si esto no le ayuda, entonces le sugiero que permite crear y publicar su propio SSCCE para que podamos ver lo que está mal.

+1

funciona de hecho. Para mi mesa, aunque no funciona. Ver EDITAR. –

3

El encabezado de la tabla también utiliza un componente del procesador, como las celdas de la tabla.

vistazo a esto:

table.getTableHeader().setDefaultRenderer(new DefaultTableRenderer(){ 
    { 
    // you need to set it to opaque 
    setOpaque(true); 
    } 

@Override 
public Component getTableCellRendererComponent(final JTable table, 
    final Object value, final boolean isSelected, final boolean hasFocus, 
    final int row, final int column) { 
    // set the background 
    setBackground(yourDesiredColor); 
    } 
}); 

Si no necesita un color dinámico, también puede establecer el color en el constructor del procesador.

5

recomiendo que hagas esto:

DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); 
headerRenderer.setBackground(new Color(239, 198, 46)); 

for (int i = 0; i < myJTable.getModel().getColumnCount(); i++) { 
     myJTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer); 
} 
7

probar este ... table.getTableHeader() setOpaque (falso);.

entonces configurar el fondo de la cabecera JTable

table.getTableHeader() setBackground (Color.BLACK).;

Cuestiones relacionadas