Aquí hay un ejemplo simple de dibujar un óvalo.¿Por qué swing draw componente simple dos veces?
public class SwingPainter extends JFrame{
public SwingPainter() {
super("Swing Painter");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(new MySwingComponent());
setSize(200, 200);
setVisible(true);
}
public static void main(String[] args) {
new SwingPainter();
}
class MySwingComponent extends JComponent {
public void paintComponent(Graphics g) {
System.out.println("paintComponent");
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(10, 10, 50, 50);
}
@Override
protected void paintBorder(Graphics g) {
System.out.println("Paint border");
super.paintBorder(g);
}
@Override
protected void paintChildren(Graphics g) {
System.out.println("Paint children");
super.paintChildren(g);
}
}
}
Pero en modo de depuración o añadir algo de información a la consola antes de dibujar (como en el ejemplo), se puede ver que la oscilación se basa componentes dos veces.
paintComponent
fronterizas pintura
niños pintura
paintComponent
fronterizas pintura
niños pintura
No puedo entender por qué sucede, pero creo que puede afectar el rendimiento en una GUI difícil.
posible duplicado de http://stackoverflow.com/questions/4814289/why-is-my-code-executing-paintcomponentgraphics-page-twice –
posible duplicado de [paintComponent se está ejecutando dos veces] (http: // stackoverflow. com/questions/4800885/paintcomponent-is-executing-twice) –