2010-12-11 25 views
5

En Swing JPanel dice que es opaco, ¿qué significa eso?JPanel dice que es opaco, ¿qué significa eso?

¿Cómo se compara JPanel VS JComponent en relación con opaque?

Explique si es posible en términos simples, por lo tanto, no tengo mucha experiencia en la programación de GUI.

Gracias de antemano por su ayuda

Respuesta

12

opaco tiene un significado muy específico en Swing - esto significa que el componente pinta completamente el área completa dentro de sus límites (ver el setOpaque javadoc)

Esto se utiliza principalmente para determinar si es necesario volver a pintar componentes detrás de la componente actual.

  • Si Isopaque es cierto, es necesario volver a pintar nada detrás del componente (ya que acaba de ser sobrescrito ), por lo tanto, tales dibujo fondo se puede omitir como una optimización.
  • Si isOpaque es falso, indica que el componente está implementando algunos efectos de transparencia - p. dibujar un componente que tiene una ventana semi-transparente en el medio, o dibujar un componente no rectangular

Si va a crear su propio JComponent y setOpaque a cierto pero no cumplir con el contrato (es decir, que no dibujar el área completa dentro de los límites a pesar de afirmar que es opaca), entonces puede obtener resultados inesperados debido a que el fondo no se vuelve a dibujar.

5

opacas y transparentes son palabras opuestas.

Una ventana, el agua o el aire son transparentes, se puede ver a través de ellos.

Una pared, barro u hormigón son opacos; no se puede ver a través de ellos.

En términos de programación de la GUI, tanto JPanel como JComponent son opacos por defecto. Si los establece transparentes, es probable que no vean mucha diferencia, ya que el JFrame subyacente (o lo que sea) generalmente tendrá el mismo color que el JPanel/JComponent.

+1

, por supuesto, es correcto en lo que significa transparente y opaco en general, pero el resto es engañoso. Opaqueness in Swing es una bandera especial para indicar si se requiere una pintura de fondo detrás de un componente, * no * en general afecta cómo se representa el componente en sí. – mikera

2

Otra referencia útil es la sección sobre Opacity en el artículo Painting in AWT and Swing. También es útil saber que JPanel es opaque by default en muchos L&Fs, mientras que JLabel es not.

+0

'JPanel' puede o no ser opaco por defecto. Depende de qué versión de qué PL & F esté en efecto. –

+1

+1, los tutoriales siempre pueden dar una explicación más completa que nosotros, y usted también aprenderá otros hechos interesantes. – camickr

+0

@camickr: Buen punto; ¡Acabo de enterarme de que la opacidad de 'JPanel' depende de L & F! :-) – trashgod

Cuestiones relacionadas