|
(2)方法二
直接设计一个ImageButton 构件类,它继承Canvas类,在其内部通过对按钮的
按下或释放的判断来改变按钮轮廓的明暗边界。当判断出按钮按下时,就改变按钮
边框的明暗布局。这样,就动态地实现了一个按钮按下和释放的过程。然后我们可
以把图像裱贴在按钮的中心位置,这就实现了图像按钮的功能。其中,设计一个se
tPush(booleanPush)函数,也把它加入ImageButton类中。它的功能是设置图像按
钮构件当前按下或释放状态。最后,可以在一个Panel构件中,加入许多这样的Ima
geButton构件。具体设计如下:
class ButtonCanvas extends Canvas{
boolean tPush;
Dimension ps;
Image img;
ButtonCanvas(Image image,int x,int y){
img=image;
ps=new Dimension();
ps.width=x;
ps.height=y;
}
public void setPush(boolean tt){
tPush=tt;
repaint();
}
public void paint(Graphics g){
//绘制按钮边界和背景
g.drawRect(0,0,ps.width-1,ps.height-1);
setBackground(Color.gray);
g.setColor(Color.gray.brighter());
g.fillRect(2,2,ps.width-3,ps.height-3);
//*** 在画布上绘制按钮 按下或释放 ***
if(!tPush){
g.setColor(Color.gray.darker());
g.drawLine(ps.width-2,1,ps.width-2,ps.height-2);
g.drawLine(1,ps.height-2,ps.width-2,ps.height-2);
g.setColor(Color.white);
g.drawLine(1,1,ps.width-2,1);
g.drawLine(1,1,1,ps.height-2);
}
else{
g.setColor(Color.white);
g.drawLine(ps.width-2,1,ps.width-2,ps.height-2);
g.drawLine(1,ps.height-2,ps.width-2,ps.height-2);
g.setColor(Color.gray.darker());
g.drawLine(1,1,ps.width-2,1);
g.drawLine(1,1,1,ps.height-2);
}
//**** 在按钮中心加载图像 ******
g.drawImage(img,
ps.width/2-img.getWidth(this)/2,
ps.height/2-img.getHeight(this)/2,this);
}// end of paint()
}// end of ButtonCanvas
|