问答题
下面是一个Applet程序,其功能是绘制三维矩形以使该矩形面凹下,并将图像放入凹下的矩形面中。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
注意:不改动程序的结构,不得增行或删行。
源程序文件代码清单如下:
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
import java.util.*;
import java.net.*;
/*
<applet code="ex01_3.class"width=800 height=400>
</applet>
*/
public class ex01_3 extends Applet
{
private Image IMG onClick=over(this) title=放大;
public void init()
{
URL url=getCodeBase();
IMG onClick=over(this) title=放大=getImage(url,"ex01_3.gif");
MediaTracker mt={{U}}new MediaTracker(){{/U}};
mt.addImage(IMG onClick=over(this) title=放大,1);
try
{
mt.waitForAll();
} catch(Exception e)
{
e.printStackTrace();
}
setBackground(Color.black);
}
public void paint(Graphics g)
{
int thick=3,x=10,y=10;
{{U}}g.drawImage(IMG onClick=over(this) title=放大,x,y){{/U}};
g.setColor(Color.lightGray);
int w = IMG onClick=over(this) title=放大.getWidth(this);
int h = IMG onClick=over(this) title=放大.getHeight(this);
for(int i=0;i<thick;i++)
{{U}}g.draw3DRect(x,y,w+(a*i),true){{/U}};
}
}
{{B}}ex01_3.html{{/B}}
<HTML>
<HEAD>
<TITLE>ex01_3</TITLE>
</HEAD>
<BODY>
<applet code="ex01_3.class"width=800 height=400>
</applet>
</BODY>
</HTML>
【正确答案】
【答案解析】new MediaTracker(this)
g.drawImage(img,x,y,this)
g.draw3DRect(--x,--y,w+(2*i),h+(2*i),false)
[解析] 本题主要考查Applet图形绘制和图像显示。解题的关键是掌握绘制三维矩形的基本方法,掌握MediaTracker的基本用法,熟悉图形界面的坐标分布以及通过简单的方法来获得坐标。本题中,第1处,MediaTracker类的对象初始化需要将this指针作为参数传递给该类的构造函数;第2处,Graphics类的对象g调用drawImage()方法显示从磁盘文件中读取的Image对象,第4个参数需要将this作为参数传递给该方法;第3处,g调用draw3DRect()方法绘制三维矩形,最后一个参数为false表示矩形是凹下的,相反为凸起,第1个和第2个参数做递减是为了让显示效果看起来是矩形的左上方和图像的左上方有一定的距离,让人感觉矩形将图像包含在内。程序运行结果如下。
