在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,如果双击,则会清除该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。

admin2009-01-15  40

问题 在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,如果双击,则会清除该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
                                          
   注意:不改动程序的结构,不是增行或删行。
   import java.applet.*;
   import java.awt.*;
   import java.awt.event.*;
   public class Example3_1 extends Applet
   {
   int xPoint,  yPoint;
   int sum;
   Image displayIm;
   public void init()
   {
           displayIm = getImage("ms.jpg");
           addMouseListener(new SClickMouse()) ;
           sum = 2;
   }
   public void paint(Graphics g)
   {
           if(sum == 1)
               g.drawImage(displayIm,  xPoint,  yPoint,  this);
           else
               g.fillRect(xPoint,  yPoint,  60,  60);
   }
   public class SClickMouse implements MouseListener
   {
           public void mouseClicked(MouseEvent mouse)
           {
               sum = mouse.getClickCount();
               xPoint = mouse.getX();
               yPoint = mouse.getY();
               paint();
       }
       public void mouseEntered(MouseEvent mouse)
       {
       }
       public void mouseExited(MouseEvent mouse)
       {}
       public void mousePressed(MouseEvent mouse)
       {
           xPoint = mouse.getX();
           yPoint = mouse.getY();
           showStatus("x="+xPoint+",y-"+yPoint);
       }
       public void mouseReleased(MouseEvent mouse)
       }
       }
   }
   }
   Exampie3_1.html:
   <html>
   <head><title>Example3_1</title></head>
   <body>
   <applet code="Example3_1.class" width="400" height="500">
   </applet>
   </body>
   </html>

选项

答案①displayIm=getImage(getDocumentBase(),"ms.jpg") 第一处也可改作displayIm=getImage(getCodeBase(),"ms.jpg") ②g.clearRect(xPoint,yPoint,60,60) ③repaint()

解析 Applet获得图像有两种方式,一种是 getImage(URL url),另一种是getImage(URL url, String name)。init()方法用来初始化小应用程序,首先是将图像文件读入内存,然后为小应用程序添加鼠标点击事件。paint()方法向页面绘制图像,题中的if-else语句表示用户单击鼠标则在鼠标单击的位置显示图片,用户多次点击鼠标,则清除该点右下方长宽均为60的矩形区域内的图像。SClickMouse实现了鼠标监听器。mouseClicked中获取鼠标点击的位置和点击的次数。mousePressed方法获得鼠标按下的坐标,并将坐标值显示在状态栏中。
第一种方法所使用的URL必须是包含图像文件名的绝对URL,所以本处不能填使用文件名作参数。采用第二种获得图像的方式时,如果图像和Applet在同一文件夹可使用 getCodeBase()获得相应的URL,当图像和 Applet所属的HTML文件在同一文件夹时,可以采用getDocumentBase()获得相应的URL。所以第一个错误可以改为getDocument Base(),也可以改为getCodeBase()。
第二处错误,Graphics对象作图时,可以使用 clearRect()方法清除某一个区域的图形,而 fillRect()方法只是根据当前颜色(本题中为黑色)画出一个实心矩形。在程序要求Applet绘制图形时,只能调用repaint()方法,此方法会自动调用paint()方法。故第三个错误应该改成 repaint()方法。
转载请注明原文地址:https://jikaoti.com/ti/pxb0FFFM
0

最新回复(0)