Différence entre la peinture, la peintureComponent et PaintComponents en swing
-
29-10-2019 - |
Question
Quelle est la différence réelle entre paint()
, paintComponent()
et paintComponents()
en Java Swing?
J'ai essayé de comprendre ce qui expliquait dans Oracle Docs mais je ne suis pas clair.
La solution
- Awt, remplacer
paint()
. - Conteneur de niveau supérieur swing (les egs sont
JApplet
,JFrame
,JWindow
,JDialog
..), passer outrepaint()
. Mais il y a un certain nombre de bonnes raisons ne pas pour peindre dans un TLC. Un sujet pour une question distincte, peut-être. - Le reste de la swing, l'emportent
paintComponent()
. - Ni l'appel ni l'appel explicitement
paintComponents()
, laissez à l'API pour l'appeler en cas de besoin.
Assurez-vous également d'utiliser @Override
notation chaque fois que l'emporte-coup d'une méthode.
Cela ferait allusion au problème d'essayer de remplacer paintComponent(..)
dans un JFrame
(il n'a pas une telle méthode), ce qui est assez courant à voir.
Autres conseils
Vous pourriez être intéressé à lire Peinture en awt et swing
Une citation:
Les règles qui s'appliquent aux composants légers de l'AWT s'appliquent également aux composants de swing - par exemple, la peinture () est appelée quand il est temps de rendre - sauf que Swing facteurs que la peinture () appelle trois méthodes distinctes, qui sont invoquées dans le Ordre suivant:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
Les programmes de swing devraient remplacer PaintComponent () au lieu de remplacer la peinture (). Bien que l'API le permette, il n'y a généralement aucune raison de remplacer PaintBorder () ou PaintComponents () (et si vous le faites, assurez-vous de savoir ce que vous faites!). Cette enformation facilite les programmes de remplacer uniquement la partie de la peinture qu'ils doivent étendre. Par exemple, cela résout le problème AWT mentionné précédemment lorsqu'un échec à invoquer Super.paint () a empêché les enfants légers d'apparaître.