Swing 双缓冲帧

Swing 双缓冲帧,swing,jframe,jpanel,double,buffer,Swing,Jframe,Jpanel,Double,Buffer,[警告,我是一名初学者,我对JFrame知之甚少,我才刚刚开始,但非常感谢您的帮助!] 所以,这是我的问题:我目前正在做一些非常简单的事情,只是一个红色的矩形在屏幕上移动,我知道这样的初学者听起来一定很简单 我当前的代码: package movement; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; public class Movement extends JFrame { p

[警告,我是一名初学者,我对JFrame知之甚少,我才刚刚开始,但非常感谢您的帮助!]

所以,这是我的问题:我目前正在做一些非常简单的事情,只是一个红色的矩形在屏幕上移动,我知道这样的初学者听起来一定很简单

我当前的代码:

package movement;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Movement extends JFrame {

public static void main(String[] args) {


    Movement m = new Movement();

    m.setSize(1000, 1000);
    m.setTitle("Movement");
    m.setBackground(Color.WHITE);
    m.setVisible(true);
    m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

public void paint (Graphics g){
    int width = 0;
    int height = 0;
    int x = 100;
    int y = 900;

    while(x < 1000 && y > 0){
    //System.out.println("Success");    
    g.setColor(Color.RED);
    g.fillRect(x+width, y-height, 200, 200);
    //g.fillRect(x+width, y-height, 200, 200);
    try{
        Thread.sleep(10);
    } catch(InterruptedException e){
    }
    g.setColor(Color.WHITE);
    g.fillRect(x+width, y-height, 200, 200);
    //g.fillRect(x+width, y-height, 200, 200);
    width=width+1;
    height=height+1;

    }


}

}
包装运动;
导入java.awt.Color;
导入java.awt.Graphics;
导入javax.swing.JFrame;
公共阶级运动扩展了JFrame{
公共静态void main(字符串[]args){
运动m=新运动();
m、 设置大小(10001000);
m、 片名(“运动”);
m、 挫折地面(颜色:白色);
m、 setVisible(真);
m、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共空间涂料(图g){
整数宽度=0;
整数高度=0;
int x=100;
int y=900;
而(x<1000&&y>0){
//System.out.println(“成功”);
g、 setColor(Color.RED);
g、 fillRect(x+宽度,y-高度,200200);
//g、 fillRect(x+宽度,y-高度,200200);
试一试{
睡眠(10);
}捕捉(中断异常e){
}
g、 setColor(Color.WHITE);
g、 fillRect(x+宽度,y-高度,200200);
//g、 fillRect(x+宽度,y-高度,200200);
宽度=宽度+1;
高度=高度+1;
}
}
}

正如您所看到的,它可以工作,但是图像有点结巴和抖动,因为只有一个缓冲区。我听说添加一个JPanel可以让我的缓冲区翻倍,体验更流畅,但由于我是一个真正的初学者,我不知道如何在这里实现它。我不确定JPanel在这方面会有什么帮助,以及以何种方式使用它

默认情况下,Swing是双缓冲的。您正在重写帧的paint()方法,但尚未调用super.paint(…),因此将丢失默认的双缓冲

我听说添加一个JPanel可以让我的缓冲区翻倍,体验更流畅

是的,这是定制绘画的正确方式。不难的是,您只需重写JPanel的
paintComponent()
方法并将面板添加到框架中。有关更多信息和示例,请阅读上Swing教程的部分

此外,在绘制方法中,决不应该使用带有Thread.sleep()的while循环。要制作动画,您应该使用
摆动计时器
。我上面提供的教程链接也有一个关于计时器的部分,或者你可以在论坛/网站上搜索示例