ejemplo - painting in awt and swing
Forzar el diseƱo y la pintura inmediatos en Swing (2)
Parece que no puedo forzar un diseño en Swing. Tengo un JComponent
agregado a JLayeredPane
y establezco un borde en el JComponent
. Entonces, quiero volver a dibujar todo de inmediato, no en el sentido de "por favor haz esto lo antes posible" como invalidate()
, sino sincrónica e inmediatamente. ¿Alguna ayuda? Parece que no puedo encontrar el método correcto para hacerlo, y todas mis lecturas sobre invalidate(), validate(), repaint(), doLayout(), etc
me confunden más.
La forma más confiable de hacer que Swing actualice una pantalla es usar SwingUtilities.invokeLater
. En tu caso, se vería como
SwingUtilities.invokeLater(new Runnable {
public void run() {
somecomponent.repaint();
}
});
Me doy cuenta de que el ''invokelater'' no suena exactamente como algo inmediato, pero en la práctica, los eventos publicados de esta manera se ejecutan bastante rápido en comparación con simplemente llamar, por ejemplo, somecomponent.repaint()
directamente. Si absolutamente debe hacer que su código de control espere a que la GUI se actualice, entonces también hay invokeAndWait
, pero mi experiencia es que esto rara vez es necesario.
Ver también: documento sobre el envío del evento en Swing.
De acuerdo con esto (consulte la sección titulada "Pintura sincrónica") el método paintImmediately () debería funcionar.