Pergunta

Eu tenho um renderizador de célula simple-ish que é composto de algumas JLabels (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 .

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top