Pregunta

Tengo un procesador de celdas sencilla-ish que se compone de unos JLabels (el procesador en sí se extiende JPanel) y estoy tratando de conseguir que se hacen con sensatez en el aspecto y la sensación de Nimbus. Básicamente lo que ocurre es que en el más ligero filas (como tiene Nimbus alternativo para colorear fila ), mi procesador de celdas específico está utilizando el color de fondo de la tabla (que es mucho más oscuro que tanto más ligero y más oscuros los fila colores). En mi procesador que hago:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

Si comento todo este bloque de código a cabo a continuación, a continuación, todas mis filas están en la fila más oscuro de color (no el fondo de la tabla, pero no en colores alternos tampoco). No estoy seguro de que incluso entiendo lo que puede estar pasando! ¿Cómo es el fragmento anterior de células productoras de código con diferentes colores de fondo en absoluto? Está cambiando el color table.getBackground entre invocaciones de mi método?

He intentado usar este fragmento de código:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

que está en la clase DefaultTableCellRenderer. Y no parece tener ningún efecto en absoluto. Alguien tiene procesadores de celdas personalizadas que trabajan con Nimbus?

Editar : Si alguien está interesado, esto resultó ser un problema con Scala procesadores de celdas mesa, como lo fue en realidad el uso Scala, no Java. La respuesta aceptada a continuación funciona bien en un programa Java. cuestión distinta presentada aquí .

¿Fue útil?

Solución

Su primera pieza de código si fine.I creo que hay que utilizar para UIManager.getColor("Table.alternateRowColor") filas alternas y table.getBackground () en caso contrario. Para fila seleccionada utilizar table.getSelectionBackground (). Así que el código podría ser como

if (isSelected) {
    setBackground(table.getSelectionBackground());
}
else {
    if ( row % 2 == 0 ) {
       setBackground(UIManager.getColor("Table.alternateRowColor"));
    } else { 
       setBackground(table.getBackground());
    }
}

No se olvide de asegurarse de que su panel es opaco y las etiquetas son transparentes.

Aquí es un buen enlace a los valores de la interfaz de usuario Nimbus: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top