¿Puedo usar dos aspectos diferentes en la misma aplicación Swing?
-
22-07-2019 - |
Pregunta
Estoy usando la cinta Flamingo y la apariencia de Substance Office 2007.
Por supuesto, ahora todos los controles tienen este aspecto, incluso los de los cuadros de diálogo.
Lo que quiero es algo como en Office 2007, donde las cintas tienen su aspecto de Office 2007, pero otros controles mantienen su aspecto nativo de Vista / XP.
¿Es posible asignar a ciertos controles una apariencia diferente? ¿Quizás utilizando algún tipo de encadenamiento o una apariencia de proxy?
Solución
Acabo de descubrir: desde Sustancia 5.0 SKIN_PROPERTY está disponible.
Permite asignar diferentes máscaras a diferentes JRootPanes
(es decir, JDialog
, JFrame
, JInternalFrame
)
Un pequeño truco: anulo JInternalFrame
para eliminar el borde adicional y el panel de título para que se vea como un panel sin bordes. De esa manera, es posible crear la impresión de que las diferentes partes de un formulario / diálogo tienen un aspecto diferente.
Otros consejos
Aquí hay una biblioteca que cambiará automáticamente la apariencia. No estoy seguro de que esto se haga para cada componente de una manera diferente, pero debes echarle un vistazo. pbjar.org
Este libro debería ser útil si desea profundizar en la apariencia / java-look-and-feel-design-Guidelines-second-edition
Me gustaría ver algún ejemplo de código, si alguien puede escribirlo, no dude en comenzar.
EDIT:
En este hilo del foro Hilo encontré lo siguiente descripción
Swing usa un Look & amp; Siente (un PLAF). Los PLAF no se adjuntan en un J-Frame nivel. Se adjuntan en una máquina virtual nivel. Es casi imposible mezclar PLAF dentro de una aplicación. yo tengo visto algunos intentos, todos fallaron.
Swing desafortunadamente hace muchos "psuedo-global" cosas detrás de escena. AFAIK, la única forma de hacerlo consistentemente es usar la API privada AppContext
. Cada AppContext
tiene su propio hilo de envío de eventos y otros "psuedo-globals".