Pregunta

Tengo un Java Japplet incrustado en una página web. La ventana Japplet contiene una sola instancia de una clase que extiende JPanel, el mismo tamaño que el Japplet. El applet puede generar ventanas emergentes (Jframes) cuando el usuario hace clic en un botón que está en el panel.

Cada vez que hago clic en un botón para aparecer en una ventana, mi applet se parpadea a medida que vuelve a pintar. También hace lo mismo cuando hago clic en él nuevamente o cuando tuvo un enfoque y hago clic en una ventana diferente: mi conclusión: es un repinte que se está forzando en los eventos FocusLost () y FocusGined ().

Estoy implementando doble búfer en el método de pintura del panel como este:

@Override
public void paint(Graphics g)
{
    if(resized)
    {
        offscreen = createImage(getWidth(),getHeight());
        resized = false;
    }

    Graphics offscreenG = offscreen.getGraphics();

    /// DRAW HERE:

    // paint the main window contents:
    view.paint(offscreenG);
    // paint the child components of our panel.
    super.paint(offscreenG);

    /// FRAW FINISHED

    g.drawImage(offscreen,0,0,this);
    offscreenG.dispose();
}

El objeto View no es un componente de swing, sino solo una clase que sabe caliente para dibujar todo en un objeto gráfico.

El método de pintura de Japplet () no se anula.

Probablemente podría anular los métodos de Focusged/FocusLost de mi Japplet para evitar el repintado, pero prefiero escuchar una mejor solución al problema.

¿Fue útil?

Solución

No hay necesidad de implementar el doble búfer, esto se hace automáticamente mediante swing. Construye un applet de la misma manera que crea una aplicación. Es decir, agregas componentes al panel de contenido del Japplet.

Si debe hacer una pintura personalizada, anula el método PaintComponent () de un jpanel y agregue el panel al applet.

Lea la sección del tutorial de swing en Pintura personalizada por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top