Question

J'ai un CellRenderer simple ish qui se compose de quelques JLabels (le moteur de rendu s'étend JPanel) et je suis en train de le faire pour rendre sensiblement dans le regard Nimbus et sentir. Fondamentalement, ce qui se passe est que dans le plus léger lignes (comme Nimbus a coloriage autre de la ligne ), mon CellRenderer spécifique utilise la couleur d'arrière-plan de table (ce qui est beaucoup plus sombre que les deux plus léger et plus sombre ligne couleurs). Dans mon renderer je fais:

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

Si je commente ce bloc tout le code est interrompu, alors toutes mes lignes sont dans le plus sombre ligne couleur (pas l'arrière-plan de la table, mais pas dans des couleurs alternatives non plus). Je ne suis pas sûr que je comprends même ce qui peut se passer! Comment est l'extrait ci-dessus des cellules productrices de code avec différentes couleurs d'arrière-plan du tout? Est-ce la couleur de change table.getBackground entre les invocations de ma méthode?

Je l'ai essayé d'utiliser ce bout de code:

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

Ce qui est dans la classe DefaultTableCellRenderer. Et il ne semble pas avoir d'effet du tout. Quelqu'un at-CellRenderer personnalisés travaillant avec Nimbus?

EDIT : Si quelqu'un est intéressé, cela se révèle être un problème avec Scala Table CellRenderer, comme je l'utilisait en fait Scala, pas Java. La réponse acceptée ci-dessous fonctionne très bien dans un programme Java. question distincte déposée ici .

Était-ce utile?

La solution

Votre premier morceau de code si fine.I pensez que vous devez utiliser pour UIManager.getColor("Table.alternateRowColor") lignes alternées et table.getBackground () autrement. Pour utiliser la ligne sélectionnée table.getSelectionBackground (). Donc, votre code pourrait ressembler à

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

Ne pas oublier de vous assurer que votre panneau est opaque et les étiquettes sont transparentes.

Voici un bon lien vers l'interface utilisateur par défaut Nimbus: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top