下面是一个Applet程序,其功能是在窗口中绘制3个半径递增的圆,并用RGB三原色对这3个圆填充。要求建立一个绘制圆的类,实现根据指定颜色进行填充的功能,在主程序中通过调用这个类的方法实现圆的绘制。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下:
import java.applet.*; import java.awt.*; import java.awt.*; /* <applet code="ex22_3.class" width=800 height=400 > </applet> */ class CanvasCircle extends Canvas{ private Color cCircle; public CanvasCircle(Color c){ cCircle = c; } public void paint(Graphics g){ int dimCricle, xCircle, yCircle; Dimension sizeCurrent = getSize(); if (sizeCurrent.width > sizeCurrent.height){dimCricle = sizeCurrent.width; } else{dimCricle = sizeCurrent.height; } g.setColor(cCircle); xCircle = (sizeCurrent.height - dimCricle) / 2; yCircle = (sizeCurrent.width - dimCricle) / 2; g.fillOval(xCircle, yCircle, dimCricle, dimCricle); } } public class ex22_3 extends Applet{ public void init(){GridBagLayout gbl = new GridBagLayout();GridBagConstraints gbc = new GridBagConstraints();CanvasCircle circleNew;setLayout(gbl);gbc.weightx = 1.0;gbc.weighty = 1.0;gbc.fill = GridBagConstraints.BOTH;circleNew = new CanvasCircle(Color.red);gbl.setConstraints(circleNew, gbc);add(circleNew);gbc.weightx = 1.5;gbc.weighty = 1.5;circleNew = new CanvasCircle(Color.green);gbl.setConstraints(circleNew, gbc);add(circleNew);gbc.weightx = 2.0;gbc.weighty = 2.0;circleNew = new CanvasCircle(Color.blue);gbl.setConstraints(circleNew, gbc);add(circleNew); } } ex22_3.h tml <HTML> <HEAD> <TITLE>ex22_3</TITLE> </HEAD> <BODY> <applet code="ex22_3.class" width=800 height=400 > </applet> </BODY> </HTML>
参考答案:
解析:sizeCurrent.width<sizeCurrent.height xCircle= (sizeCurrent.width-dimCricle) /2 yCircle=(sizeCurrent.height-dimCricle)/2 本题主要考查根据需要设计能完成绘制圆的Canvas子类的编程,以及与Applet图形绘制的基本操作相结合的综合应用。 解题关键是CanvasCircle类的编写,颜色作为对外的接口,根据颜色参数来确定绘制圆的颜色,因此通过类的构造方法从外界获得这个参数,paint()是重载了Canvas的方法,初始化CanvasCircle对象之后,自动执行实现绘制。本题中,第1处,根据条件判断式的含义,很容易得到答案;第2处,要明白窗口getSize().width属性,对应的参数应该是xCircle,同理第3处 getSize().height属性对应的参数是yCircle。