Разница между paint, paintComponent и paintComponents в Swing - PullRequest
27 голосов
/ 22 февраля 2012

Какая разница между paint(), paintComponent() и paintComponents() в Java Swing?

Я пытался понять, что объясняется в документации Oracle, но мне не ясно.

Ответы [ 2 ]

36 голосов
/ 22 февраля 2012
  • AWT, переопределение paint().
  • Swing контейнер верхнего уровня (например, JApplet, JFrame, JWindow, JDialog ..), переопределение paint(),Но есть ряд веских причин , а не для рисования в TLC.Тема для отдельного вопроса, возможно.
  • Остальная часть Swing, переопределить paintComponent().
  • Ни переопределить, ни явно вызвать paintComponents(), оставьте это API, чтобы вызывать его при необходимости..

Обязательно используйте нотацию @Override при переопределении метода.

Это может указывать на проблему попытки переопределить paintComponent(..)в JFrame (у него нет такого метода), что довольно часто встречается.

17 голосов
/ 22 февраля 2012

Вас может заинтересовать чтение Живопись в AWT и Swing

Цитата:

Правила, которые применяются к облегченным компонентам AWT, также применяются к компонентам Swing - например, paint () вызывается, когда приходит время рендеринга, - за исключением того, что Swing дополнительно учитывает вызов paint () в три отдельных метода, которые вызывается в следующем порядке:

 protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)

Программы Swing должны переопределять paintComponent () вместо переопределения paint (). Хотя API это позволяет, обычно нет причин переопределять paintBorder () или paintComponents () (и если вы это сделаете, убедитесь, что вы знаете, что делаете!). Этот факторинг позволяет программам переопределять только ту часть рисунка, которую они должны расширить. Например, это решает проблему AWT, упомянутую ранее, когда сбой вызова super.paint () препятствовал появлению легких детей.

...