2010-12-11 21 views
5

Dans Swing JPanel dit être opaque, qu'est-ce que cela signifie?JPanel dit être opaque qu'est-ce que cela signifie?

Comment JPanel VS JComponent comparé par rapport à opaque? S'il vous plaît expliquer si possible en termes simples, d'où je ne suis pas très expérimenté dans la programmation GUI

Merci d'avance pour votre aide

Répondre

12

Opaque a une signification très spécifique dans Swing - cela signifie que le composant peint entièrement toute la zone au sein de son limites (voir le setOpaque javadoc)

Ceci est principalement utilisé pour déterminer s'il est nécessaire de repeindre les composants derrière la composant actuel.

  • Si isOpaque est vrai, il est inutile de repeindre quoi que ce soit derrière le composant (car il serait être simplement remplacé), d'où un tel tirage d'arrière-plan peut être omis comme une optimisation.
  • Si isOpaque est faux, alors il indique que le composant applique des effets de transparence - par ex. dessin d'un composant qui a une demi-transparente fenêtre au milieu, ou à dessiner un composant non rectangulaire

Si vous créez votre propre JComponent et setOpaque à vrai, mais ne pas honorer le contrat (vous ne tire pas la zone entière dans les limites malgré prétendre être opaque) alors vous pouvez obtenir des résultats inattendus en raison de l'arrière-plan n'étant pas redessiné.

5

Opaque et transparent sont des mots opposés. Une fenêtre, de l'eau ou de l'air sont transparents - vous pouvez voir à travers eux.

Un mur, de la boue ou du béton sont opaques - vous ne pouvez pas voir à travers eux.

En termes de programmation GUI, JPanel et JComponent sont tous deux opaques par défaut. Si vous les définissez comme transparents, vous ne verrez probablement pas beaucoup de différence, puisque le JFrame sous-jacent (ou autre) sera généralement de la même couleur que JPanel/JComponent.

+1

vous avez bien sûr raison de ce que signifie généralement transparent et opaque, mais le reste est trompeur. Opacité dans Swing est un drapeau spécial qui indique si la peinture d'arrière-plan derrière un composant est nécessaire, cela n'affecte en général pas la façon dont le composant est rendu. – mikera

2

Une autre référence utile est la section sur Opacity dans l'article Painting in AWT and Swing. Il est également utile de savoir que JPanel est opaque by default sur de nombreux L&Fs, tandis que JLabel est not.

+0

'JPanel' peut ou non être opaque par défaut. Cela dépend de la version de laquelle PL & F est en vigueur. –

+1

+1, tutoriels peuvent toujours donner une explication plus complète que nous pouvons, plus vous apprenez d'autres faits intéressants. – camickr

+0

@camickr: Bon point; Je viens d'apprendre que l'opacité 'JPanel' dépend du L & F! :-) – trashgod