java - llamar - Diferencia entre pintura, pinturaComponente y pinturaComponentes en Columpio
paintcomponent java ejemplo (2)
¿Cuál es la diferencia real entre paint()
, paintComponent()
y paintComponents()
en Java Swing?
Traté de entender lo que se explica en los documentos de Oracle, pero no estoy seguro.
Le puede interesar leer Pintura en AWT y Swing
Una cita:
Las reglas que se aplican a los componentes livianos de AWT también se aplican a los componentes Swing; por ejemplo, se llama a paint () cuando es el momento de renderizar, excepto que Swing factoriza la llamada paint () en tres métodos separados, que se invocan en siguiente orden:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
Los programas Swing deben anular paintComponent () en lugar de anular paint (). Aunque la API lo permite, generalmente no hay ninguna razón para anular paintBorder () o paintComponents () (y si lo hace, ¡asegúrese de saber lo que está haciendo!). Este factoraje hace que sea más fácil para los programas anular solo la parte de la pintura que necesitan extender. Por ejemplo, esto resuelve el problema de AWT mencionado anteriormente donde una falla al invocar super.paint () impidió que aparecieran los niños livianos.
- AWT, anula la
paint()
. - Swing contenedor de nivel superior (los egs son
JApplet
,JFrame
,JWindow
,JDialog
..), anula lapaint()
. Pero hay una serie de buenas razones para no pintar en un TLC. Un tema para una pregunta separada, tal vez. - El resto de Swing, anula
paintComponent()
. - Ni anular ni llamar explícitamente a
paintComponents()
, dejar que la API lo llame cuando sea necesario.
Asegúrese de utilizar también la notación @Override
siempre que anule un método.
Si lo hace, podría insinuar el problema de tratar de anular paintComponent(..)
en un JFrame
(no tiene dicho método), que es bastante común de ver.