Java JApplet双缓冲
我的JApplet有一个问题,我使用它的全部原因是默认情况下,缓冲读取器已经存在于其中 所以我的程序将移动一个球,但它在不同的位置创建了许多不同的图片,就像它假设的那样,但我不知道以后如何删除它们。这就是它看起来的样子: 这是我的密码:Java JApplet双缓冲,java,image,japplet,doublebuffered,Java,Image,Japplet,Doublebuffered,我的JApplet有一个问题,我使用它的全部原因是默认情况下,缓冲读取器已经存在于其中 所以我的程序将移动一个球,但它在不同的位置创建了许多不同的图片,就像它假设的那样,但我不知道以后如何删除它们。这就是它看起来的样子: 这是我的密码: private Image img; double bollx = 150, bolly = 690; double dy = 30, dx = 30; double x , y; int diameter = 23; int click = 0, varje
private Image img;
double bollx = 150, bolly = 690;
double dy = 30, dx = 30;
double x , y;
int diameter = 23;
int click = 0, varjeClick;
JPanel panel;
int yBounce = 0, xBounce = 0;
public void init(){
setSize(1900, 900);
panel = new JPanel();
panel.setLocation(50, 50);
panel.setSize(1800, 700);
//panel.setLayout(null);
panel.addMouseListener(this);
panel.setBackground(Color.white);
this.add(panel);
img = getImage(getCodeBase(), "basketboll.png");
}
public void start(){
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g){
//super.paintComponents(g);
g.drawImage(img, (int)bollx, (int)bolly, panel);
}
public void flyttaBoll(){
//om stilla eller inte
if(click == 0){
bollx = 150;
bolly = 690;
}
else{
gravity();
bollx += dx*0.02;
bolly += dy*0.02;
}
if(bollx >= (panel.getWidth() - diameter*2.2)){
bollx = panel.getWidth() - diameter*2.200000001;
dx *= -0.9 ;
}
if(bollx <= 0 + diameter){
bollx = diameter + 1;
dx *= -0.9 ;
}
if(bolly >= panel.getHeight() - diameter*2.2){
bolly = panel.getHeight() - diameter*2.200000001;
dy *= -0.7;
yBounce++;
if(yBounce >= 130){
click = 0;
yBounce = 0;
varjeClick = 0;
}
}
if(bolly <= 0 + diameter){
bolly = diameter + 1;
dy *= -0.7;
}
}
public void gravity(){
if(varjeClick <= 7){
dy += 9.82;
}
else{
dy -= 9.82;
}
}
public void run() {
while(true){
flyttaBoll();
repaint();
try{Thread.sleep(8);}catch(Exception e){}
}
}
public void mousePressed(MouseEvent e){
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
x = b.getX() - diameter/2;
y = b.getY() - diameter/2;
dx = x - bollx;
dy = y - bolly;
flyttaBoll();
}
私有图像img;
双铃X=150,铃Y=690;
双dy=30,dx=30;
双x,y;
内径=23;
int click=0,varjeClick;
JPanel小组;
int yBounce=0,xBounce=0;
公共void init(){
设置大小(1900、900);
panel=新的JPanel();
面板设置位置(50,50);
面板设置尺寸(1800700);
//panel.setLayout(空);
panel.addMouseListener(本);
面板.立根背景(颜色.白色);
本条添加(面板);
img=getImage(getCodeBase(),“basketboll.png”);
}
公开作废开始(){
螺纹t=新螺纹(此);
t、 start();
}
公共空间涂料(图g){
//超级组件(g);
g、 drawImage(img,(内部)bollx,(内部)bolly,面板);
}
公共无效Flytaboll(){
//欧姆斯蒂拉埃勒酒店
如果(单击==0){
铃数=150;
波莉=690;
}
否则{
重力();
bollx+=dx*0.02;
bolly+=dy*0.02;
}
如果(bollx>=(panel.getWidth()-直径*2.2)){
bollx=面板.getWidth()-直径*2.200000001;
dx*=-0.9;
}
如果(bollx=panel.getHeight()-直径*2.2){
bolly=panel.getHeight()-直径*2.200000001;
dy*=-0.7;
yBounce++;
如果(Y盎司>=130){
单击=0;
yBounce=0;
varjeClick=0;
}
}
如果(bolly JApplet,像所有顶级容器一样,不是双缓冲的。相反,创建一个自定义JPanel并覆盖它的paintComponent方法,将所有逻辑放在这个类中,然后将小程序简单地用作自定义面板的容器。另外,您必须调用super.paint(g)(您的示例)或super,paintComponent(g)(我的注释),否则您将得到绘制人工制品和其他奇怪的消息。因此,小程序的大小由HTML标记定义