Quelle est la différence réelle entre Paint()
, paintComponent()
et paintComponents()
dans Java Swing?
J'ai essayé de comprendre ce qui était expliqué dans les documents Oracle mais je ne suis pas clair.
Paint()
.JApplet
, JFrame
, JWindow
, JDialog
..), remplacer Paint()
. Mais il y a plusieurs bonnes raisons de ne pas peindre dans un TLC. Un sujet pour une question séparée, peut-être.paintComponent()
.paintComponents()
, laissez à l'API le soin de l'appeler en cas de besoin.Assurez-vous d'utiliser également la notation @Override
Lors de la substitution 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.
Vous pouvez être intéressé par la lecture Peinture en AWT et Swing
Une citation:
Les règles qui s'appliquent aux composants légers d'AWT s'appliquent également aux composants Swing - par exemple, Paint () est appelé au moment du rendu - sauf que Swing factorise davantage l'appel Paint () en 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 Swing doivent remplacer paintComponent () au lieu de remplacer Paint (). 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 factorisation permet aux programmes de remplacer uniquement la partie de la peinture dont ils ont besoin pour s'étendre. Par exemple, cela résout le problème AWT mentionné précédemment où l'échec de l'appel de super.Paint () a empêché l'apparition d'enfants légers.