In altalena, c'è una proprietà per impostare un colore di primo piano disabile JList?
Domanda
In altalena, c'è una proprietà per impostare un colore di primo piano disabile JList?
sto usando il costruttore di Netbeans GUI e voglio aggiungere un alloggio ai file di proprietà delle risorse che imposta il colore del testo in un JList ad un predefinito diverso quando il JList è disattivato. Utilizzando la Nimbus LAF, c'è un colore diverso per questo, perché il testo è grigio quando è disabilitato, ma il nero quando è abilitata. Solo che non voglio che sia grigia quando disattivato.
Il colore di primo piano standard è solo .foreground.
Grazie.
Soluzione
Il DefaultListCellRenderer
estende JLabel
. Nel suo metodo getListRendererComponent
, imposta lo stato abilitato basato su quello del JList
che viene passato.
Il codice per la pittura disabile testo JLabel
in BasicLabelUI
fa un certo lavoro di dipingere il testo con un effetto ombra. In molte sottoclassi, troverete il codice che cerca la proprietà "Label.disabledForeground"
UI. Le impostazioni predefinite Nimbus sembrano cercare "Label.disabledText"
.
Hai un paio di opzioni:
- È possibile impostare la proprietà
"Label.disabledText"
nelUIManager
, che renderà tutte le istanzeJLabel
e sottoclassi che sono disabilitati ad assumere questa colorazione. - È possibile creare un renderer personalizzato per il tuo
JList
che mette alla prova lo stato abilitato delJList
e poi fa tutto il codice personalizzato che si desidera - o omettere il test stato di attivazione del tutto, se si desidera guardare lo stesso a prescindere dalla sua abilitati stato.
Vorrei suggerire che si prende l'approccio renderer personalizzato, in quanto è difficile dire dove il cambiamento di una proprietà JLabel
rivelerà, come quella classe viene utilizzato come un blocco builing in molti componenti diversi.
Altri suggerimenti
Se c'è una proprietà per impostare poi le impostazioni predefinite UIManager programma dovrebbe mostrare la proprietà di cambiare. Non vedo una proprietà per il metallo o Windows LAF quindi potrebbe indicare questo è controllato direttamente nel codice utente.