下面是一个Applet程序,其功能是根据公式:y=a*sin(x)绘制正弦曲线。要求窗口中有一个文本区作为曲线峰值a的输入,可以判断输入的数字是否符合要求,一个ok按钮,点击则在画布中绘制曲线,以画布中的横坐标值作为sin()的参数x。请改正程序中的错误(

admin2009-01-15  73

问题 下面是一个Applet程序,其功能是根据公式:y=a*sin(x)绘制正弦曲线。要求窗口中有一个文本区作为曲线峰值a的输入,可以判断输入的数字是否符合要求,一个ok按钮,点击则在画布中绘制曲线,以画布中的横坐标值作为sin()的参数x。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
   注意:不改动程序的结构,不得增行或删行。
   程序运行结果如下:
         
     import java.awt.*;
     import java.awt.event.*;
     import java.applet.Applet;
     import java.lang.Math.*;
     /*
     <applet code="ex18_3.class" width=800 height=400 >
     </applet>
     */
     public class ex18_3 extends Applet implements ActionListener {
       Panel pane=new Panel();
       drawWnd dw;
       Label 11 = new Label("峰值");
       TextField tf1 = new TextField(15);
       Button btn = new Button("OK");
       private float a=0;
       public void init(){
           pane.setLayout(new FlowLayout(FlowLayout.CENTER,25,5));
           pane.add(11);
           pane.add(tf1);
           pane.add(btn);
           btn.addActionListener(this);
           add("North",pane);
           dw=new drawWnd();
           add("South",dw);
       }
       class drawWnd extends Canvas {
           drawWnd()  {
              setSize(300,100);
              setBackground(Color. GRAY);
           }
           public void paint(Graphics g)  {
               g.setColor(Color.GREEN);
               for(int i=0;i<getSize().width-1;i++){
                   int y=0;
                   int y1=y+(int) (Math.sin(i)*a);
                   int y2=y1+(int) (a*Math.sin(i+1));
                    g.drawLine(i,y1,i+1,y2);
              }
        }
     }
     public void actionPerformed(ActionEvent ae)  {
        try{
               a=Integer.parseInt(tf1.getText());
                dw.repaint();
         }
         catch(NumberFormatException nfe){
            tf1.setText("error!");
         }
     }
  }
  ex18_3.html
  <HTML>
  <HEAD>
    <TITLE>ex18_3</TITLE>
  </HEAD>
  <BODY>
   <applet code="ex18_3.class" width=800 height=400 >
  </applet>
  </BODY>
</HTML>

选项

答案y=getSize().height/2 int y2=y+(int)(a*Math.sin(i+1)) a=Float.parseFloat(tf1.getText())

解析 本题主要考查Applet的图形绘制,Applet的生命周期以及其事件处理机制。解题关键是熟悉Applet窗口中坐标的布局,会使用TextField,Canvas,Button等构件,会使用内部类继承Canvas类,实现在画布中绘制图像的方法,并通过在主程序中结合事件处理机制来调用该方法。本题中,第一处,由于画布中的纵坐标是从上向下从0开始的,因此需要有一个相对坐标原点,这里取画布的一半;第二处,计算下一点的坐标,应该是相对于坐标原点y而言的坐标值,不应该是y1;第三处,a为float类型的变量,因此要用Float类的类型转换方法。
转载请注明原文地址:https://jikaoti.com/ti/PkkiFFFM
0

最新回复(0)