2011-03-08 2 views
1

Je définis l'arrière-plan d'un JWindow complètement transparent. Ensuite, j'ai peint un Rectangle arrondi (RGB: 0,0,0,100) dans son paint-Method et ajouté un JLabel au JWindows ContentPane. Mais quand j'essaye de repeindre le JWindow pour mettre à jour le JLabel, il ne supprime pas l'ancien Rectangle et l'ancienne valeur du JLabel. Le résultat est que ma boîte d'info personnalisée (ce qu'elle devrait être) devient moins transparente et vous ne pouvez pas lire le contenu de JLabels, car il recouvre les anciens contens.JLabel sur Rectangle peint transparent?

Est-il possible de résoudre ce problème? Par ailleurs, si je ne repeint pas, il ne devient pas moins transparent, mais le nouveau contenu de mon JLabel recouvre l'ancien contenu, comme il est, quand je repeindre.

Répondre

1

D'abord, vous devez remplacer paintComponent au lieu de paint et appeler super.paintComponent(g). Vous devriez laisser JWindow opaque, car le composant sur le calque le plus à l'arrière effacera l'ancien contenu. Si toutes les couches sont transparentes, vous finirez avec des déchets d'écran.

Voir painting with Swing. Peut-être que vous vouliez vraiment créer translucent windows?

+0

Oui, je veux créer des fenêtres translucides, mais je pense que cela ne fonctionne pas pour Mac OS 10.6.6. – esanits

+0

JWindow n'a pas 'paintComponent (Graphics g)' mais il a 'paintComponents (Graphics g)'. Mais quand je l'écrase, il ne peint rien? – esanits

+0

Je pense que le volet de contenu est un 'JPanel', donc vous pouvez définir la peinture de contenu à votre propre' JPanel' personnalisé et remplacer 'paintComponent()'. La question "Comment puis-je créer des fenêtres translucides sous Mac OS?" vaut vraiment la peine de demander à l'OMI. –

Questions connexes