2012-03-09 11 views
6

C'è un modo per cambiare il disegno di sfondo predefinito di tutte le istanze di un componente di swing (un JPanel per esempio) per dipingere con uno sfondo a gradiente? O dovrei creare un'estensione di JPanel che dipinga con una sfumatura e poi usarla al posto di JPanel ovunque nella mia app?Sfondo sfumato predefinito del componente di rotazione

+0

Non dovresti farlo solo per lo sfondo JPanel, e quindi rendere non tutti gli altri JPanel non opachi? –

+0

@HovercraftFullOfEels, anche questa è un'altra opzione. Se volessi estenderlo ad altri componenti, penso che avrei comunque bisogno di estendere questi componenti. –

+0

@JeffStorey: forse, ma non necessariamente. Puoi creare i tuoi JPanel tramite un semplice metodo di fabbrica che imposta l'opaco su falso, oppure potresti ricorrere attraverso la GUI impostando tutti gli JPanel non di base non opachi. –

risposta

3

IMHO, sarebbe più semplice creare una sottoclasse del componente Swing e ignorare il metodo paintComponent per eseguire la sfumatura. E poi, come hai detto, usa questo componente personalizzato per tutta l'applicazione.

Potrebbe essere difficile utilizzare le proprietà dell'interfaccia utente poiché potrebbero non essere coerenti su tutti i LaF.

+0

quello era il mio pensiero iniziale. non ero sicuro se ci fosse un modo più semplice per farlo. soprattutto se volessi applicare il gradiente a più tipi di componenti, avrei bisogno di sottoclasse tutti i componenti. –

+0

@JeffStorey, In tal caso, forse sarebbe meglio sottoclasse 'JComponent'. – Moonbeam

+0

Non sono sicuro di come sarebbe utile per più tipi di componenti. Diciamo che stavo cambiando lo sfondo di un pulsante, come sarebbe la sottoclasse di aiuto di JComponent qui? –

0

Non è del tutto chiaro quale scopo intendete. Intendevi per classe (quindi tutte le istanze di JPanel seguono il nuovo schema di disegno) oppure intendi tutti i componenti in un contenitore (ad esempio, tutto in Frame)?

Ci sono possibilità di fare ciò a seconda della classe del componente, i punti in cui è possibile agganciare sono il Look and Feel e, in base all'istanza del componente, il metodo paintComponent() o se è necessario sostituire il aspetto standard di un componente esistente in cui non è possibile sovrascrivere il metodo perché non si ha il controllo su di esso, fornendo la propria classe di interfaccia utente (guardare Component.setUI) dopo che il componente è stato creato.

Fatta eccezione per l'approccio di sovrascrittura del colore, non è semplice implementare l'approccio. Per la maggior parte delle applicazioni l'approccio semplice è il migliore :)

Problemi correlati