下面是一个Applet程序,实现实心或者空心矩形的绘制。要求鼠标在Applet窗口中拖动实现矩形的绘制,可以选择填充或者空心,按钮用来清空窗口中的图像。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或

admin2009-01-15  41

问题 下面是一个Applet程序,实现实心或者空心矩形的绘制。要求鼠标在Applet窗口中拖动实现矩形的绘制,可以选择填充或者空心,按钮用来清空窗口中的图像。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
   注意:不改动程序的结构,不得增行或删行。
   源程序代码文件清单如下:
   import java.awt.*;
   import java.applet.*;
   /*
   <applet code="ex16_3.class" width=800 height=400>
   </applet>
    */
   public class ex16_3 extends Applet
   {
       private Button btnClear;
       private CheckboxGroup cbg;
       private Checkbox chk1, chk2;
           private int upX,  upY;
       private int downX, downY;
           private boolean bDraw, bClear, bStyle;
       public void init()
           {
           bDraw = false;
           bClear = false;
           bStyle = false;
           setLayout(null);
           cbg = new CheckboxGroup();
           chk1 = new Checkbox("Hollow", cbg, true);
           chk2 = new Checkbox("Filled", cbg, false);
           chk1.reshape(80,getSize().height-80,80,25);
           chk2.reshape(160,getSize().height-80,80,25);
           add(chk1);
           add(chk2);
           btnClear = new Button("ctear");
           btnClear.reshape(240,getSize().height-80,80,25);
           add(btnClear);
       }
       public void paint(Graphics g)
           {
               if (bDraw)
               {
                   if(upX>downX && upY>downY)
                   {
                       if(bStyle)
                           g.fillRect(downX, downY, upX-downX, upY-downY);
                       else
                           g.drawRect(downX, downY, upX-downX, upY-downY);
               }
               else if(upX>downX&&upY<downY)
                   {
                       if(bStyle)
                           g.fillRect(downX, upY, upX-downX, downY-upY);
                       else
                            g.drawRect(downX, upY, upX - downX,  downY - upY);
               }
               else if(upX<downX && upY>downY)
                   {
                       if(bStyle)
                       g.fillRect(upX, downY, downX-upX, upY-downY);
                       else
                       g.drawRect(upX, downY, downX-upX, upY-downY);
               }
                   else if(upX<downX && upY<downY)
                   {
                       if(bStyle)
                       g.fillRect(upX, upY, downX-upX, downY-upY);
                       else
                       g.drawRect(upX, upY, downX-upX, downY-upY);
               }
                   bDraw = false;
               }
               if (bClear)
               {
               g.clearRect(0,0, getSize().height, getSize().width);
               bClear = false;
           }
       }
   public void update(Graphics g)
       {
       paint(g);
   }
   public boolean mouseUp(Event e, int x, int y)
       {
       upX=x;
       upY=y;
       bDraw=true;
       repaint();
       return true;
   }
   public boolean mouseDown(Event e, int x, int y)
       {
       downX=x;
       downY=y;
       return true;
       }
   public boolean action(Event e, Object o)
       {
           if(e.target==btnClear)
           {
           bClear=true;
           repaint();
           }
           if(chk1.getState()==true)
           {
           bStyle=true;
           }
           if(chk2.getState()==true)
           {
           bStyle=false;
           }
           return true;
       }
   }
   ex9_3.html
   <HTML>
    <HEAD>
      <TITLE>ex9_3</TITLE>
    </HEAD>
    <BODY>
      <applet code="ex9_3.class" width=800 height=400>
      </applet>
    </BODY>
   </HTML>

选项

答案g.clearRect(0,0,getSize().width,gets ize().height) bStyle=false bStyle=true

解析 本题主要考查Applet图形界面编程与鼠标事件相结合进行简单的图形绘制。解题关键是熟悉Applet中的事件机制,会利用鼠标事件进行简单的矩形绘制,通过mouseUp(), mouseDown()来获取鼠标移动的坐标,熟悉 CheckboxGroup类Checkbox的用法,通过 Checkbox来控制矩形是否填充。本题中,第1个空,对象g的方法clearRect()的最后两个参数应该对调,因为第3个参数是代表矩形的宽度,第4个是高度;第2个空,第1个Checkbox不用填充,这里bStyle=false是表示用填充;第3个空,和第2个空正好相反。
转载请注明原文地址:https://jikaoti.com/ti/z6b0FFFM
0

最新回复(0)