applet中重画时消除图像的抖动及显示按钮问题!!

05-08-21 sunlight2
请问如果我的applet里的paint()函数不光显示一幅图片,而且在里面显示文字,画线,等。该怎么用双缓冲呢?能不能提供些这方面的比较完整的代码?比如,一般都是在paint()函数里显示图的(drawImage方法),我不在paint()里画,再外面画的代码,怎么显示呢?是不是要弄到paint()函数里呢?我不明白,烦劳大侠们帮忙!!

还有,我的applet上还有其他按钮,我的paint方法里用了代码1后,可以显示按钮和图片,如图1,所示。但重画时,抖动的很厉害。我用代码2替换代码1后,虽然不抖动了,但是却显示不出按钮了,如图2所示。请大家帮忙!!

//代码1

public void paint(Graphics g)
{
super.paintComponents(g);
//画外框
g.drawRect(imageRect_loc_x,imageRect_loc_y,leftRectWidth,leftRectHeight);
//显示地图 
if(aImage!=null)
{
g.drawImage(aImage,show_pic_loc_x,show_pic_loc_y,this);
}
//画比例尺
g.drawRect(ratioLoc_x,ratioLoc_y,ratioWidth,6);
g.fillRect(ratioLoc_x+ratioWidth,ratioLoc_y,ratioWidth,6);
g.drawLine(ratioLoc_x,ratioLoc_y-6,ratioLoc_x,ratioLoc_y);
g.drawLine(ratioLoc_x+2*ratioWidth-1,ratioLoc_y-6,ratioLoc_x+2*ratioWidth-1,ratioLoc_y);
//显示比例尺上的数据
g.drawString("0",ratioLoc_x-3,ratioLoc_y-12);
if(unitdistance<1)
{
g.drawString(String.valueOf(1000*unitdistance) +"m",ratioLoc_x+2*ratioWidth-3,ratioLoc_y-12);
}
else
{
g.drawString(String.valueOf(unitdistance)+"km",ratioLoc_x+2*ratioWidth-3,ratioLoc_y-12);
}
}
<p>

// 在此输入java代码
<p>

图1:

代码2

public void paint(Graphics g)
{ 
//试图消除图片抖动
Image OffScreen = createImage(getSize().width,getSize().height); ///子画面
// Image OffScreen = createImage(leftRectWidth,leftRectHeight); 
Graphics OffScreen_g = OffScreen.getGraphics(); ///子画面的Graphics
// drawOffScreen.fillRect(0,0,width,height); ///画子画面
//画外框
OffScreen_g.drawRect(imageRect_loc_x,imageRect_loc_y,leftRectWidth,leftRectHeight);
//显示地图 
if(aImage!=null)
{
OffScreen_g.drawImage(aImage,show_pic_loc_x,show_pic_loc_y,this);
}
//画比例尺
OffScreen_g.drawRect(ratioLoc_x,ratioLoc_y,ratioWidth,6);
OffScreen_g.fillRect(ratioLoc_x+ratioWidth,ratioLoc_y,ratioWidth,6);
OffScreen_g.drawLine(ratioLoc_x,ratioLoc_y-6,ratioLoc_x,ratioLoc_y);
OffScreen_g.drawLine(ratioLoc_x+2*ratioWidth-1,ratioLoc_y-6,ratioLoc_x+2*ratioWidth-1,ratioLoc_y);
//显示比例尺上的数据
OffScreen_g.drawString("0",ratioLoc_x-3,ratioLoc_y-12);
if(unitdistance<1)
{
OffScreen_g.drawString(String.valueOf(1000*unitdistance)+"m",ratioLoc_x+2*ratioWidth-3,ratioLoc_y-12);
}
else
{
OffScreen_g.drawString(String.valueOf(unitdistance)+"km",ratioLoc_x+2*ratioWidth-3,ratioLoc_y-12);
}

g.drawImage(OffScreen,imageRect_loc_x,imageRect_loc_x,this); ///画到applet上
}
<p>

这样的效果是:可以消除抖动,但按钮却显示不出来了!!

如图2所示:

烦劳大侠们帮忙!急啊!!

sunlight2
2005-08-23 20:02
为什么没有人回复我的问题啊????

dabb
2005-08-24 09:42
居然是福州的。呵呵

sunlight2
2005-08-25 09:28
是啊,但是按钮怎么才能和图片共存呢??即在下面的图片中重画图片时不会抖动??,郁闷啊

猜你喜欢