下面是一个Applet程序,其功能是绘制三维矩形以使该矩形面凹下,并将图像放入凹下的矩形面中。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下:
import java.awt.*; import java.applet.*; import java.awt.image.*; import java.util.*; import java.net.*; /* <applet code="ex16_3.class" width=800 height=400 > </applet> */ public class ex16_3 extends Applet { private Image IMG onClick=over(this) title=放大; public void init() {URL url = getCodeBase();IMG onClick=over(this) title=放大 = getImage(url,"ex16_3.gif");MediaTracker mt = new MediaTracker();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;g.drawImage(IMG onClick=over(this) title=放大,x,y);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++) g.draw3DRect(x, y,w+(2*i),h+(2*i),true); } } ex16_3.html <HTML> <HEAD> <TITLE>ex16_3</TITLE> </HEAD> <BODY> <applet code="ex16_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的基本用法,熟悉图形界面的坐标分布级已通过简单的方法来获得坐标。本题中,第一处,MediaTracker类的对象初始化需要将this指针作为参数传递给该类的构造方法;第二处,Graphics类的对象g调用drawImage()方法显示从磁盘文件中读取的Image对象,第四个参数需要将this作为参数传给该方法;第三处,g调用draw3DRect()方法绘制三维矩形,最后一个参数为false表示矩形是凹下的,相反为凸起,第一和第二个参数作递减是为了让显示效果看起来是矩形的左上方和图像的左上方有一定的距离,让人感觉矩形将图像包含在内。