java - Swing - 停止图像闪烁

标签 java swing

我最近一直在练习 java 的 swing 特性,在我的一个扩展类 JPanel 的类中,我重写了方法 paintComponent() 以便它将我的 BufferedImage 绘制到 JPanel 上.我也有一个方法可以四处移动。在这个问题之前,我遇到了一个问题,它显示了移动过程,因为它重绘得太快了。因此,我创建了一个名为 available 的 boolean 变量,当图像仍在移动过程中时将其设置为 false。但是,现在我看到屏幕正在拿走整个图像并将其放回去,导致它闪烁。这是我的基本伪代码:

class A extends JPanel{
    BufferedImage canvas;
    public A(){
        //create image here
    }
    public move(){
        available = false;
        //move things around in here
        available = true;
    }
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        if(available){
            g.drawImage(this.canvas, 0, 0, null);
        }
        g.dispose();
    }
}
class B{
    public static void main(String[] args){
        //construct the class A JPanel
        while(some_variable){
            class_A_JPanel.repaint();
        }
    }
}

最佳答案

这是一个非常古老的话题,在现代 Java 中得到了解决。但是您更喜欢旧方法然后使用旧技术。例如Double Buffering

关于java - Swing - 停止图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932544/

相关文章:

java - 什么是 Java ? : operator called and what does it do?

java - Wicket - 通过 LoginPage 传递页面参数

java - 在 Swing 中实现拒绝用户更改值的最佳方法?

java - 创建类的新对象后获取 NPE

用于故障转移配置和架构的 Java JAX-WS 多个 Web 服务

java - SQL Server 和 Java 之间的时区代码转换

java - 静态内存是否位于 Java 堆之外?

java - java中的PATH和CLASSPATH变量

java - InvokeLater() - 一次就够了吗?

java - 如何将 JTable 的所有列自动调整为相同大小?