张思名的JAVA教程的实验程序(7)

来源:互联网 发布:淘天下网络pos机是真是假 编辑:程序博客网 时间:2024/05/16 10:44
昨天休息了一天,今天继续。。。。。
 
 
//这个是一个计算平方根的APPLET程序
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Ex7_1 extends Applet implements ActionListener
 {
 TextField text;
 Button buttonEnter,buttonQuit;
 public void init()      //设置基本的组件
    {
      text=new TextField("0",10);
      add(text);
      buttonEnter=new Button("确定");
      buttonQuit=new Button("清零");
      add(buttonEnter);
      add(buttonQuit);
      buttonEnter.addActionListener(this); //设置监听
      buttonQuit.addActionListener(this);
      text.addActionListener(this);
    }
 public void paint(Graphics g)
    {
      g.drawString("在文本框输入数字字符回车或单击按钮",10,100);
      g.drawString("在文本框显示该数的平方根",10,120);
    }
 public void actionPerformed(ActionEvent e)
    {
     if(e.getSource()==buttonEnter||e.getSource()==text)
       {
         double number=0;
         try                      //捕捉异常NumberFormatException
           {
             number=Double.valueOf(text.getText()).doubleValue();
             text.setText(" "+Math.sqrt(number));
           }
         catch(NumberFormatException event)
           {
             text.setText("请输入数字字符");
           }
       }
     else if(e.getSource()==buttonQuit)
       {
          text.setText("0");
       }
    }
 }
//这一类程序必须实现init()方法,并且用actionPerfomed()方法实现监听
 
 
//这是一个简单的实现了加减乘除的APPLET计算器程序
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Ex7_2b extends Applet implements ActionListener
 {
 TextField text1;
 TextField text2;
 TextField text3;
 double number1=0,number2=0;
 int flag1=0,flag2=0;                             //定义flag来处理强行非数字字符计算的情况,1标志为有效  
 Button buttonAdd,buttonSub,buttonMul,buttonDiv;
 public void init()
    {
      text1=new TextField("0",20);     //init的编写结构一般为:分配空间,添加进组件,注册监听
      text2=new TextField("0",20);
      text3=new TextField("0",20);
      add(text1);
      add(text2);
      add(text3);
      buttonAdd=new Button("");
      buttonSub=new Button("");
      buttonMul=new Button("");
      buttonDiv=new Button("");
      add(buttonAdd);
      add(buttonSub);
      add(buttonMul);
      add(buttonDiv);
      buttonAdd.addActionListener(this);
      buttonSub.addActionListener(this);
      buttonMul.addActionListener(this);
      buttonDiv.addActionListener(this);
      text1.addActionListener(this);
      text2.addActionListener(this);
      text3.addActionListener(this);
    }
 public void paint(Graphics g)
    {
      g.drawString("在前两个文本框中输入要参与计算的两个数,在最后一个文本框中显示结果",50,100);
      g.drawString("四个按钮代表加减乘除四种计算",50,120);
    }
 public void actionPerformed(ActionEvent e)
    {      
      text3.setText(" ");
      if(e.getSource()==buttonAdd)this.Addaction(); //只对多关心的事件做出反应,而把异常归并到相关事件的处理中去
      if(e.getSource()==buttonSub)this.Subaction(); //因为我不关心文本框的输入,而只要能够在计算时提取其中的数据//就可以了,故不对其产生的事件反应
      if(e.getSource()==buttonMul)this.Mulaction();
      if(e.getSource()==buttonDiv)this.Divaction();   
    }
   public void Text1action()                    //要注意标志的清零
    {
     try
      {
       number1=Double.valueOf(text1.getText()).doubleValue();
       flag1=0;
      }
     catch(NumberFormatException event)
      {
       text1.setText("请输入数字字符");
       flag1=1;
      }
    }
   public void Text2action()
    {
     try
      {
       number2=Double.valueOf(text2.getText()).doubleValue();
       flag2=0;
      }
     catch(NumberFormatException event)
      {
       text2.setText("请输入数字字符");
       flag2=1;
      }
    }
   public void Addaction()
    {
       Text1action();
       Text2action();
       if(flag1==0&&flag2==0)                     //用标志屏蔽计算,以节省资源
         {
           String str1=String.valueOf(number1+number2);
           text3.setText(" "+str1);
         }
       else
         text3.setText("输入了非法字符无法计算!");
    }
 public void Subaction()
    {
       Text1action();
       Text2action();
       if(flag1==0&&flag2==0)
         {
           String str1=String.valueOf(number1-number2);
           text3.setText(" "+str1);
         }
       else
         text3.setText("输入了非法字符无法计算!");
    }
 public void Mulaction()
    {
       Text1action();
       Text2action();
       if(flag1==0&&flag2==0)
         {
           String str1=String.valueOf(number1*number2);
           text3.setText(" "+str1);
         }
       else
         text3.setText("输入了非法字符无法计算!");
    }
 public void Divaction()
    {
       Text1action();
       Text2action();
       if(flag1==0&&flag2==0)
         {
           String str1=String.valueOf(number1/number2);
           text3.setText(" "+str1);
         }
       else
         text3.setText("输入了非法字符无法计算!");
    }
}
//本程序编写的几个要点
//1.首先,要明确你所关心的事件,actionPerformed方法是针对相关组件(事件源)的发生的
// 事件作出的反应,也就是说他必须对所有程序关心的事件作出反应!
//2.再者,actionPerformed中若作出的反应太繁琐,可以如本例以调用方法的形式来实现,以
// 达到简化程序的目的。
//3.关于标志的使用,这是一个较难的运用,必须在完全清楚程序运行的过程的基础上,为每个
// 事件设定相应标志并且要及时清零.故可以不用的话最好不用,程序简单才是王道!