Projetando renderizador de célula simples para Nimbus look and feel
-
19-09-2019 - |
Pergunta
Eu tenho um renderizador de célula simple-ish que é composto de algumas JLabel
s (o processador se estende JPanel
) e eu estou tentando fazê-lo para tornar sensivelmente no olhar Nimbus ea sensação. Basicamente o que está acontecendo é que no mais leve linhas (como Nimbus tem linhas alternadas colorir ), meu renderizador de célula específica está usando a cor de fundo da tabela (que é muito mais escura do que ambos mais leve e a linha mais escura cores). Na minha renderizador eu faço:
if (isSelected) {
setBackground(table.getSelectionBackground);
}
else {
setBackground(table.getBackground);
}
Se eu comentar este bloco inteiro de código para fora, em seguida, em seguida, todas as minhas linhas estão no escuro linha cor (não o fundo da tabela, mas não em cores alternativas, quer). Eu não tenho certeza se eu sequer entender o que pode estar acontecendo! Como está o trecho de código acima produzir células com diferentes cores de fundo em tudo? É a cor table.getBackground
mudando entre invocações de meu método?
Eu tentei usar esse trecho de código:
Color alternateColor = sun.swing.DefaultLookup.getColor(
peer,
peer.getUI,
"Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
setBackground(alternateColor);
O que é na classe DefaultTableCellRenderer
. E não parece ter qualquer efeito em tudo. Alguém tem renderizadores de célula personalizados trabalham com Nimbus?
Editar : Se alguém estiver interessado, este acabou por ser um problema com Scala renderizadores de célula da tabela, como eu estava realmente usando Scala, não Java. A resposta aceite abaixo funciona muito bem em um programa Java. questão em separado arquivado aqui .
Solução
Seu primeiro pedaço de código se fine.I acho que você tem que usar UIManager.getColor("Table.alternateRowColor")
para linhas e table.getBackground () caso contrário alternados. Para uso table.getSelectionBackground linha seleccionada (). Assim, seu código pode parecer
if (isSelected) {
setBackground(table.getSelectionBackground());
}
else {
if ( row % 2 == 0 ) {
setBackground(UIManager.getColor("Table.alternateRowColor"));
} else {
setBackground(table.getBackground());
}
}
Não se esqueça de certificar-se de que o seu painel é opaco e os rótulos são transparentes.
Aqui está um bom link para os padrões de Nimbus UI: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html