Diferencia entre pintura, pinturaComponente y pinturaComponentes en Columpio

¿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.

  • AWT, anula la paint() .
  • Swing contenedor de nivel superior (los egs son JApplet , JFrame , JWindow , JDialog ..), anula la paint() . Pero hay una serie de buenas razones para no pintar en un TLC. Un tema para una pregunta separada, tal vez.
  • El rest 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.

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 progtwigs 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 progtwigs 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.