Разница между краской, paintComponent и paintComponents в Swing
Какова фактическая разница между paint(), paintComponent() и paintComponents() в Java Swing?
Я попытался понять, что объясняется в документах Oracle, но я не понимаю.
Ответ 1
AWT, переопределить paint().
Верхний контейнер качания (например, JApplet, JFrame, JWindow, JDialog..), переопределяет paint(). Но есть ряд веских причин не рисовать в TLC. Возможно, тема для отдельного вопроса.
Остальная часть Swing, переопределяет paintComponent().
Ни переопределить, ни явно называть paintComponents(), оставьте его API, чтобы вызвать его при необходимости.
Обязательно также используйте нотацию @Override при переопределении метода.
Сделав это, мы попытались бы переопределить paintComponent(..) в JFrame (он не имеет такого метода), что довольно часто встречается.
Правила, применимые к легким компонентам AWT, также применяются к компонентам Swing - например, paint() вызывается, когда время для рендеринга - за исключением того, что Swing дополнительно влияет на вызов paint() на три отдельных метода, которые вызывается в следующем порядке:
Программы Swing должны переопределять paintComponent() вместо переопределения paint(). Хотя API позволяет это, обычно нет причин переопределять paintBorder() или paintComponents() (и если да, убедитесь, что вы знаете, что делаете!). Этот факторинг упрощает для программ отмену только той части картины, которую они должны продлить. Например, это решает проблему AWT, упомянутую ранее, когда отказ вызвать super.paint() помешал появлению каких-либо легких детей.