В чем реальная разница между paint()
, paintComponent()
и paintComponents()
в Java Swing?
Я пытался понять, что объясняется в документах Oracle, но мне не ясно.
В чем реальная разница между paint()
, paintComponent()
и paintComponents()
в Java Swing?
Я пытался понять, что объясняется в документах Oracle, но мне не ясно.
paint()
.JFrame
, JWindow
, JDialog
, JApplet
..), переопределить paint()
. Но есть ряд веских причин не рисовать в TLC. Тема для отдельного вопроса, пожалуй.JComponent
), переопределяет paintComponent()
.paintComponents()
явно, предоставьте API возможность вызывать его при необходимости.Обязательно используйте нотацию @Override
при переопределении метода.
Это намекает на проблему с попыткой переопределить paintComponent(..)
в JFrame
(у него нет такого метода), что довольно часто встречается.
repaint()
будет вызываться автоматически при необходимости. При анимации это также может быть вызвано явно. Хотя звонили слишком много раз, слишком быстро, и некоторые звонки будут объединены (проигнорированы).
- person Andrew Thompson; 27.11.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() препятствовал появлению любых облегченных дочерних элементов.