Java Swing - 闪烁的Canvas图形

asd*_*jkl 3 java swing canvas repaint

我必须编写一个简单的Java应用程序,它可以加载图片,以GUI形式显示,允许用户应用一些转换,并显示转换后的图片.我的解决方案工作正常,但UI有点闪烁,因为重绘方法调用太频繁(例如当用户使用JSlider缩放图像时)

我的代码看起来像这样:

public class ImageCanvas extends Canvas
{
    private BufferedImage image;
    // ...

    @Override
    public void paint(Graphics g) 
    {
        Graphics2D g2d = (Graphics2D) g;
        if(image != null)
        {
             // I draw out the image...
        }
    }

    public void setImage(BufferedImage image)
    {
        this.image = image;
        this.repaint();
    }

    public void setRotation(double rotation)
    {
        this.rotation = rotation;
        this.repaint();
    }

    public void setScale(double scaleX, double scaleY) 
    { 
       //set the scaling field, then repaint ....
    }    

    // and so on...
}
Run Code Online (Sandbox Code Playgroud)

当然,我在我的主UI上有一个ImageCanvas控件,我只是调用公共方法(参见上面的"setRotation"方法),它重绘了画布区域.我知道这是一个简单的问题,但我甚至没有在Canvas上找到DoubleBuffered属性......

任何帮助赞赏.

Bur*_*ear 7

双缓冲内置于Swing(即JComponent派生)类.

如果你想内置的双缓冲,你应该扩展JPanel而不是帆布,并覆盖paintComponent,没有paint.