2012-03-09 15 views
6

¿Hay alguna manera de cambiar la pintura de fondo predeterminada de todas las instancias de un componente oscilante (por ejemplo, un JPanel) para pintar con un fondo degradado? ¿O necesitaría crear una extensión de JPanel que pinta con un degradado y luego usar eso en lugar de JPanel en todas partes en mi aplicación?Fondo degradado predeterminado del componente oscilante

+0

¿No solo necesitarías hacer esto para el fondo de JPanel, y luego hacer que todos los demás JPanels no sean opacos? –

+0

@HovercraftFullOfEels, esa es otra opción también. Sin embargo, si quisiera extenderlo a otros componentes, creo que aún necesitaría extender esos componentes. –

+0

@JeffStorey: quizás, pero no necesariamente. Podrías crear tus JPanels a través de un método de fábrica simple que establezca el opaque en falso, o podrías volver a recurrir a través de la GUI configurando que todos los JPanels no básicos no sean opacos. –

Respuesta

3

En mi humilde opinión, sería más fácil simplemente subclasificar el componente Swing y anular su método paintComponent para hacer la pintura de degradado. Y luego, como dijiste, usa este componente personalizado en toda la aplicación.

Podría ser complicado usar las propiedades de la interfaz de usuario ya que pueden no ser consistentes en todos los archivos laf.

+0

que fue mi pensamiento inicial. no estaba seguro si había una manera más fácil de hacerlo. especialmente si quisiera aplicar el degradado a múltiples tipos de componente, necesitaría subclase de todos los componentes. –

+0

@JeffStorey, en ese caso, tal vez sería mejor subclasificar 'JComponent'. – Moonbeam

+0

No estoy seguro de cómo eso ayudaría con los tipos de componentes múltiples. Digamos que estaba cambiando el fondo de un botón, ¿cómo podría subclasificar la ayuda de JComponent aquí? –

0

No está del todo claro qué alcance tiene la intención. ¿Te refieres a clase (todas las instancias de JPanel siguen el nuevo esquema de pintura) o quieres decir todos los componentes en un contenedor (por ejemplo, todo en Frame)?

Existen posibilidades para hacer esto dependiendo de la clase de componente, los lugares donde puede conectar son Look and Feel, y en base a una instancia por componente, el método paintComponent(), o si necesita reemplazar el aspecto estándar de un componente existente donde no puede sobreescribir el método porque no tiene control sobre él, proporcionando su propia clase de IU (consulte Component.setUI) después de que se haya creado el componente.

Excepto por el método de sobrescribir paintComponent, ninguno es fácil de implementar. Para la mayoría de las aplicaciones, el enfoque simple es el mejor :)

Cuestiones relacionadas