2017-03-14 4 views
2

Je suis en train de créer un menu pour mon programme, qui dessine des objets géométriques sur un. JPanel en utilisant .getGraphics() drawImage (..)JMenu laisse une boîte grise au-dessus d'un JPanel sur lequel l'image est tirée

Le problème que j'ai est qu'après avoir sélectionné un élément sur ce menu, le texte disparaît mais pas la couleur de fond. La section utilise une méthode qui redessine l'image sur ce panneau en utilisant la commande ci-dessus, mais apparemment, cela n'aide pas à la supprimer. Après avoir cliqué sur cet élément de menu et laissé cette case grise après le menu, je peux la faire disparaître en déplaçant la scène avec ma souris, qui appelle essentiellement la même méthode que celle utilisée après le clic sur l'élément de menu. Cela me rend confus quant à savoir pourquoi l'appel de la méthode de l'élément de menu ne supprime pas la boîte, mais l'appel suivant de cette méthode le fait.

Une idée sur pourquoi cela se passe-t-il et/ou comment y remédier?

Merci.

image (A, B sont JMenus sur JMenuBar et la zone grise ci-dessous sont laissés après sélection JRadioButtonMenuItem):. A, B are JMenus on JMenuBar and the gray box below is left after JRadioButtonMenuItem selection

+0

Ma conjecture est que vous avez bloqué le panneau de se permettre de redessiner quand il détecte que le menu a disparu. Mais je ne peux pas le dire sans voir le code. –

+0

La seule chose que je définis manuellement sur le panneau est setPreferredSize(). (En outre, tous les composants sont dans un JFrame si cela fait une différence) – EyfI

Répondre

2

qui attire certains objets géométriques sur un JPanel en utilisant .getGraphics() (DrawImage.

N'utilisez pas getGraphics() pour effectuer des tâches de peinture personnalisées.

peinture personnalisée est fait en redéfinissant la méthode paintComponent(...) du JPanel. Et n'oubliez pas d'appeler super.paintComponent (...) comme première instruction.

Lisez la section du tutoriel Swing sur Custom Painting pour plus d'informations et des exemples de travail.

+0

Merci, cela a résolu le problème de la boîte grise. Cependant, maintenant, quand l'image est redessinée, elle scintille à chaque redessin, qu'est-ce qui pourrait en être la cause? – EyfI

+0

@EyfI, si vous avez plus de problèmes alors posez une autre question qui contient un [mcve] qui démontre le problème. Les chances sont en créant le 'MCVE', vous trouverez le problème. Encore une fois le but du tutoriel est pour vous de lire le tutoriel et télécharger l'exemple de travail pour apprendre la bonne façon de coder la peinture personnalisée. Assurez-vous de suivre le code du tutoriel. Il y a aussi un tutoriel sur 'Comment utiliser les menus '. – camickr