加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Swing – 闪烁的Canvas图形

发布时间:2020-12-15 08:45:55 所属栏目:Java 来源:网络整理
导读:我必须编写一个简单的 Java应用程序,它可以加载图片,以GUI形式显示,允许用户应用一些转换,并显示转换后的图片. 我的解决方案工作正常,但UI有点闪烁,因为重绘方法调用太频繁(例如当用户使用JSlider缩放图像时) 我的代码看起来像这样: public class ImageCanv
我必须编写一个简单的 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...
}

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

任何帮助赞赏.

解决方法

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

如果你想要内置的双缓冲,你应该扩展JPanel而不是Canvas,并覆盖paintComponent,而不是绘制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读