Java Applet重绘问题(100分)

  • 主题发起人 主题发起人 beyondeast
  • 开始时间 开始时间
B

beyondeast

Unregistered / Unconfirmed
GUEST, unregistred user!
我在applet的paint方法终加入了一条drawimage,但第一次打开浏览器时总是不能
正确绘出图像,必须刷新页面才能正确显示,请问是何缘故?
 
不会吧,我的就一直可以。把你的代码帖出来吧。
 
class ChessBoard extends Panel{
private Image imgBoard,imgBQizi,imgWQizi,imgBlank;
private ChessVector black=new ChessVector(),white=new ChessVector();
private int oldCsXx=-100,oldCsYy=-100, csX, csY;
private boolean placed=false;
private static int BWIDTH=1,BHEIGHT=1,GWIDTH=1,GHEIGHT=1,X0=1,Y0=1;
public ChessBoard(URLdo
cBase){
URL url1=null,url2=null,url3=null,url4=null;
//Timer t=new Timer(200,this);
//t.start();
try
{
url1=new URL(docBase,"qipan.jpg");
url2=new URL(docBase,"bchess.jpg");
url3=new URL(docBase,"wchess.jpg");
url4=new URL(docBase,"blank.jpg");
}catch (Exception e)
{
}
imgBoard=Toolkit.getDefaultToolkit().getImage(url1);
imgBQizi=Toolkit.getDefaultToolkit().getImage(url2);
imgWQizi=Toolkit.getDefaultToolkit().getImage(url3);
imgBlank=Toolkit.getDefaultToolkit().getImage(url4);
X0=20;
Y0=21;
BWIDTH=imgBoard.getWidth(null)-2*X0;
BHEIGHT=imgBoard.getHeight(null)-2*Y0;
GWIDTH=BWIDTH/15+2;
GHEIGHT=BHEIGHT/15+2;
}
public void paint(Graphics g){
g.drawImage(imgBoard,0,0,null);
}

}

public class WzqApplet extends Applet{
private InetAddress serveradd;
public void init(){
final ChessBoard chb=new ChessBoard(getDocumentBase());
setLayout(new BorderLayout());
add(chb,"Center");
}
我把代码精简了一下,基本上就这个样子了,请指教哟!
 
class创建之后强制repaint一下即可
 
不行呀,我在init和start方法中都加上了repaint,还是不行!
 
类在建立完后,自已会refresh一下的,自然也会触发repaint事件。
大概是调用了Cache,你把你的Cache清除后再试。
 
用MediaTracker跟针图像的加载:
....
java.awt.MediaTracker mt = new java.awt.MediaTracker(this);
imgBoard = Toolkit.getDefaultToolkit().getImage(url1);
mt.addImage(imgBoard,0);
try{mt.waitForID(0)}
catch(InterruptedException e){e.printStackTrace();}
 
to beyondeast:
把这一句:g.drawImage(imgBoard,0,0,null);
改为g.drawImage(imgBoard,0,0,this);
就ok了。
enjoy it!
 
多谢eguy兄了,赫赫,以后还希望多关照
 
后退
顶部