Domanda

Ho un renderer di celle semplice-ish che si compone di pochi JLabels (il renderer si estende JPanel) e sto cercando di farlo rendere sensibilmente nel look and feel Nimbus. In sostanza ciò che sta accadendo è che nel leggero righe (come Nimbus ha colorazione fila alternativo ), il mio renderer di celle specifico sta usando il colore di sfondo della tabella (che è molto più scuro sia più leggero e più scuro riga i colori). Nel mio renderer che faccio:

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

Se io commento questo intero blocco di codice fuori allora poi tutti i miei file sono nella più scura fila di colore (non lo sfondo tavolo, ma non in colori alternati o). Non sono sicuro ho anche capire che cosa può essere in corso! Come è possibile che questo frammento di codice cellule produrre con diversi colori di sfondo a tutti? È il colore table.getBackground cambiando tra le invocazioni di mio metodo?

Ho provato con questo frammento di codice:

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

Il che è nella classe DefaultTableCellRenderer. E non sembra avere alcun effetto a tutti. Qualcuno ha renderer di celle personalizzati che lavorano con Nimbus?

Modifica : Se qualcuno è interessato, questo si è rivelato essere un problema con Scala renderer di celle tavolo, come mi è stato effettivamente utilizzando Scala, non Java. La risposta accettato di seguito funziona bene in un programma Java. domanda separata archiviato qui .

È stato utile?

Soluzione

Il tuo primo pezzo di codice se fine.I penso che si debba usare UIManager.getColor("Table.alternateRowColor") per le righe alternate e table.getBackground () in caso contrario. Per riga selezionata utilizzare table.getSelectionBackground (). Quindi, il codice potrebbe essere simile

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

Non dimenticare di assicurarsi che il pannello è opaco e le etichette sono trasparenti.

Ecco un buon collegamento ai valori predefiniti Nimbus UI: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top