繁体   English   中英

刷新repaint()JAVA2D

[英]refresh repaint() JAVA2D

我在重新执行repaint()时遇到问题,可以旋转图像,但是当我停止图像(setRuletaGirando(false))并将先前方法的值更改为true时,它不会再次旋转。

绘制图像并旋转它

public void paintComponent(Graphics g) {

    // se cargan las imagenes
    BufferedImage ruleta = cargarImagen("src/imagenes/Ruleta.png");
    BufferedImage flecha = cargarImagen("src/imagenes/Flecha.png");

    //posicion en la que se ubicara la imagen a rotar
    AffineTransform at = AffineTransform.getTranslateInstance(50, 50);

    //el metodo posiciones devuelve el entero (angulo) en la posicion iteradorimagen ,

    at.rotate(Math.toRadians(posiciones(iteradorImagen++)),ruleta.getWidth()/2,ruleta.getHeight()/2);

    Graphics2D ruleta2D=(Graphics2D) g;

    ruleta2D.setColor(Color.GREEN.darker());

    ruleta2D.fillRect(0, 0, this.getWidth(), this.getHeight());

    ruleta2D.drawImage(ruleta, at, null);
    ruleta2D.drawImage(flecha, 275, 85,50,50,this);

    // este metodo propio de la clase graphics2D es el que refresca el panel y 
    //"hace girar la imagen"(repaint)
    if(ruletaGirando) {
        repaint();
    }  
   }
   }
}

有问题的方法

    public void initGUI() { 

        ruleta = new PanelRuleta();
        this.add(ruleta);
        Thread t = new Thread(){
           public synchronized void run() {
                try{
                    ruleta.setRuletaGirando(true);
                    Thread.sleep(4000);
                    ruleta.setRuletaGirando(false);
                    Thread.sleep(100);
                    ruleta.setRuletaGirando(true);
                }catch(InterruptedException e){}
            }
        };

        t.start();
    }

}

您将不得不再次调用repaint()方法。 否则,paintComponent方法将不会被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM