web-dev-qa-db-fra.com

Différence entre Paint, paintComponent et paintComponents dans Swing

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.

28
Abhishek Choudhary
  • AWT, remplacez Paint().
  • Balancer le conteneur de niveau supérieur (par exemple, 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.
  • Le reste de Swing, remplacez paintComponent().
  • Ne remplacez pas et n'appelez pas explicitement 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.

36
Andrew Thompson

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.

17
Avrom