我作了个程序,在一个jpanel里显示一个图标阵列,一共有14种图标,一般显示16*16=256个图标,这些图标按矩形排列,我通过重写paintComponent()来显示这些图标。当发生鼠标事件的时候,...
我作了个程序,在一个jpanel里显示一个图标阵列,一共有14种图标,一般显示16*16=256个图标,这些图标按矩形排列,我通过重写paintComponent()来显示这些图标。当发生鼠标事件的时候,我会改变这些图标(即在鼠标拖动出的矩形位置显示另一种图标)。我另外写里一个setScale(int scale)方法,该方法根据scale的大小来调整窗口的大小和图标的大小,同时执行repaint();
结果出现里灵异事件:
我调用setcale的时候,窗口确实改变了,但大约有50%的机会,里面的图标不能完全显示,一些图标显示为空白,如果这时把这个窗口覆盖一下,然后又看到这些空白又变回图标了;每次出现这种现象时,这些空白的位置不固定,随机的。
请问如何解决?
我的paintompont():
public void paintComponent(Graphics g) {
super.paintComponent(g);
int px=0;int py=0;
int ix,iy;
Image img;
for (ix=0;ix
py=0;
for(iy=0;iy
if (Cases[ix][iy].IsBright()){
img=BoxPro.ST_IMG[Cases[ix][iy].state()].img2[Scale];
g.drawImage(img, px, py,imgW,imgH , null);
}else{
img=BoxPro.ST_IMG[Cases[ix][iy].state()].img[Scale];
g.drawImage(img, px, py,imgW,imgH ,null);
}
py+=imgH;
}
px+=imgW;
}
}
其中,Cases〔〕〔〕是后台数据,保存里那些地方显示什么图标的信息;BoxPro.ST_IMG是一个数组,里面很多图标。
在鼠标事件里我都用repaint()。
展开