2009-01-15 8 views
8

Estoy usando la cinta Flamingo y el aspecto y apariencia de la Office 2007 de Substance.¿Puedo usar dos estilos y sensaciones diferentes en la misma aplicación Swing?

Por supuesto ahora cada control tiene esta apariencia, incluso aquellos en los cuadros de diálogo.

Lo que quiero es algo así 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? ¿Tal vez usando algún tipo de encadenamiento o una apariencia proxy?

Respuesta

9

Acabo de descubrir: desde Substance 5.0 está disponible SKIN_PROPERTY.

Permite la asignación de diferentes pieles de diferentes JRootPanes (es decir JDialog, JFrame, JInternalFrame)

Un pequeño truco: puedo reemplazar JInternalFrame para quitar el borde extra y el panel de título para que se vea como un panel sin fronteras. De esta forma, es posible crear la impresión de que diferentes partes de un formulario/diálogo tienen diferentes aspectos.

2

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 deberías echarle un vistazo. pbjar.org

Este libro debería ser útil si se quiere profundizar en apariencia /java-look-and-feel-design-guidelines-second-edition

estaría contento de ver algún ejemplo de código, si alguien puede escribir, se siente libre para conseguir el arranque.

EDIT:

En este hilo del foro Thread me encontré con la siguiente descripción

oscilación utiliza una mirada & Feel (un FAPL). Los PLAF no están conectados en un nivel por JFrame . Se adjuntan en un nivel por VM . Es casi imposible mezclar PLAF dentro de una aplicación. Tengo visto algunos intentos, todos fallaron.

+0

En realidad, es por aplicación de texto. Debería poder tener applets en diferentes sitios con diferentes PL & F instalados. –

1

Swing lamentablemente hace muchas cosas "psuedo-globales" detrás de escena. AFAIK, la única manera de hacerlo consistentemente es usar la API privada AppContext. Cada AppContext tiene su propio hilo de envío de eventos y otros "psuedo-globales".

Cuestiones relacionadas