Sto lavorando a un'app utilizzando Nimbus Look and Feel. C'è una tabella e una colonna contiene pulsanti (usando lo Table Button Column from Rob Camick). Questo funziona, ma il risultato non è quello che mi aspettavo. Ho provato a sistemare l'aspetto, ma senza risultato.Imposta il pulsante "background" di un pulsante Nimbus
Quindi la domanda è: come si modifica lo "sfondo" (l'area esterna al rettangolo arrotondato) di un pulsante Nimbus? Preferibilmente in modo non hacky :-)
Uso del pulsante di colonna di tabella di default, il risultato appare così:
Come si può vedere, lo sfondo (e con questo intendo l'area al di fuori del rettangolo arrotondato del pulsante) è errata per le righe dispari (bianche). Il codice che produce questa uscita è:
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(table.getBackground());
}
if (hasFocus) {
renderButton.setBorder(focusBorder);
} else {
renderButton.setBorder(originalBorder);
}
// <snip some code>
renderButton.setOpaque(true);
return renderButton;
}
il renderButton
è un'istanza di una predefinita JButton
. Ho provato scherzi con il colore di sfondo del pulsante, ma che non ha funzionato come mi aspettavo in un primo momento:
Color alternate = (Color)LookAndFeel.getDesktopPropertyValue("Table.alternateRowColor", Color.lightGray);
Color normal = (Color)LookAndFeel.getDesktopPropertyValue("Table.background", Color.white);
if (row % 2 == 0) {
renderButton.setBackground(normal);
} else {
renderButton.setBackground(alternate);
}
Questo produce:
così questa volta i tasti quello che sembra giusto nella prima immagine ora è cattivo e viceversa. Gli sfondi interni del pulsante (le aree all'interno dei rettangoli arrotondati) sembrano avere il colore corretto in base alla proprietà del colore di sfondo (che è ciò che è realmente modificato con la chiamata setBackground()
). Ma l'area esterna è completamente sbagliata. Va bene, cerchiamo di combinare le due cose:
Color alternate = table.getBackground();
Color normal = (Color)LookAndFeel.getDesktopPropertyValue("Table.background", Color.white);
if (row % 2 == 0) {
renderButton.setBackground(normal);
} else {
renderButton.setBackground(alternate);
}
Il risultato:
Così ora il "background" ha un aspetto corretto, ma i pulsanti non assomigliano pulsanti Nimbus più. Come faccio a fare in modo che lo "sfondo" abbia il colore corretto con i pulsanti Nimbus?
Hai provato a usare setOpaque (falso) (scusami per il cellulare quindi è difficile leggere tutto il codice) – MadProgrammer
Sì I avere, con 'setOpaque (false)' lo sfondo è sempre bianco. – DarkDust