Posso usare due diversi look and feel nella stessa applicazione Swing?
-
22-07-2019 - |
Domanda
Sto usando la barra multifunzione Flamingo e l'aspetto grafico di Substance Office 2007.
Ovviamente ora ogni controllo ha questo aspetto grafico, anche quelli nelle finestre di dialogo.
Quello che voglio è qualcosa di simile a Office 2007, in cui i nastri hanno l'aspetto di Office 2007, ma altri controlli mantengono l'aspetto di Vista / XP nativo.
È possibile assegnare a determinati controlli un aspetto diverso? Forse usando una sorta di concatenamento o un aspetto e un proxy?
Soluzione
Ho appena scoperto: da Substance 5.0 SKIN_PROPERTY è disponibile.
Permette di assegnare skin diverse a JRootPanes
(es. JDialog
, JFrame
, JInternalFrame
)
Un piccolo trucco: sovrascrivo JInternalFrame
per rimuovere il bordo extra e il riquadro del titolo in modo che appaia come un pannello senza bordi. In questo modo è possibile creare l'impressione che parti diverse di una forma / finestra di dialogo abbiano un aspetto diverso.
Altri suggerimenti
Ecco una libreria che cambierà automaticamente l'aspetto. Non sono sicuro che questo sarà fatto per ogni componente in modo diverso, ma dovresti dare un'occhiata a questo. pbjar.org
Questo libro dovrebbe essere utile se vuoi approfondire l'aspetto e la sensazione / java-look-and-feel-design-linee guida-seconda edizione
Sarei felice di vedere qualche esempio di codice, se qualcuno può scriverlo, sentiti libero di iniziare.
Modifica
In questo thread del forum Thread ho trovato il seguente descrizione
Swing utilizza un look & amp; Senti (un PLAF). I PLAF non sono collegati a un J-frame livello. Sono collegati su una macchina virtuale livello. È quasi impossibile mescolare PLAF all'interno di una domanda. io ho visto alcuni tentativi, tutti falliti.
Purtroppo Swing fa un sacco di " psuedo-global " cose dietro le quinte. AFAIK, l'unico modo per farlo in modo coerente è utilizzare l'API AppContext
privata. Ogni AppContext
ha il proprio thread di invio di eventi e altri "quotazioni psuedo-globali".