加载中…
个人资料
活到老学到老
活到老学到老
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,588
  • 关注人气:21
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

实验内容:试验6(上)

(2011-10-27 06:42:53)
标签:

杂谈

分类: 第七章AWT组建及事件处理

JAVA上机实验6

实验名称:  图形用户界面设计

实验目的掌握使用布局管理器对组件进行管理. 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法;掌握编写独立运行的窗口界面的方法; Java Swing 组件的使用方法。

实验内容:

     1、编写窗体应用程序,统计一个文本域输入文本的行数、单词数和字符数。可在图形界面中安排一个按钮、一个文本域和一个标签,点击按钮开始统计,在标签中显示结果。

     2、编写窗体应用程序,安排一个文本框、一个按钮和一个标签,从文本框录入一个数字(09),点击按钮将其对应的英文单词(如:zeroone)显示在标签中。

3、编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确:ComputerFrame类对象提供的GUI界面看到题目并通过该GUI界面给出题目的答案;MailClass是软件的主类。

程序模版

请按照模版要求,将【代码】替换为程序代码。

模板代码

Teacher.java

public class Teacher

{  int numberOne,numberTwo;

   String operator="";

   boolean right;

   public int giveNumberOne(int n)

   {  numberOne=(int)(Math.random()*n)+1;

      return numberOne;

   }

   public int giveNumberTwo(int n)

   {  numberTwo=(int)(Math.random()*n)+1;

      return numberTwo;

   }

   public String giveOperator()

   {  double d=Math.random();

      if(d>=0.5)

         operator="+";

      else

         operator="-"; 

      return operator;

   }

   public boolean getRight(int answer)

   {  if(operator.equals("+"))

       {  if(answer==numberOne+numberTwo) 

            right=true;

          else

            right=false;

       }

      else if(operator.equals("-"))

       {  if(answer==numberOne-numberTwo) 

            right=true;

          else

            right=false;

       }

      return right;

   }

}

ComputerFrame.java

import java.awt.*;

import java.awt.event.*;

public class ComputerFrame extends Frame implements ActionListener

{  TextField textOne,textTwo,textResult;

   Button getProblem,giveAnwser;

   Label operatorLabel,message;

   Teacher teacher;

   ComputerFrame(String s)

    { super(s);

      teacher=new Teacher();

      setLayout(new FlowLayout());

      textOne=【代码1     //创建textOne,其可见字符长是10

      textTwo=【代码2     //创建textTwo,其可见字符长是10

      textResult=【代码3  //创建textResult,其可见字符长是10

      operatorLabel=new Label("+");

      message=new Label("你还没有回答呢");

      getProblem=new Button("获取题目");

      giveAnwser=new Button("确认答案");

      add(getProblem);

      add(textOne);

      add(operatorLabel);

      add(textTwo);

      add(new Label("="));

      add(textResult);

      add(giveAnwser);

      add(message);

      textResult.requestFocus();

      textOne.setEditable(false);

      textTwo.setEditable(false);

【代码4//将当前窗口注册为getProblemActionEvent事件监视器    

【代码5//将当前窗口注册为giveAnwserActionEvent事件监视器

      【代码6//将当前窗口注册为textResultActionEvent事件监视器

      setBounds(100,100,450,100);

      setVisible(true);

      validate();

      addWindowListener(new WindowAdapter()

                        {  public void windowClosing(WindowEvent e)

                           {  System.exit(0);

                           }

                        }

                       );

    }

    public void actionPerformed(ActionEvent e)

    { if(【代码7) //判断事件源是否是getProblem

       { int number1=teacher.giveNumberOne(100);

         int number2=teacher.giveNumberTwo(100);

         String operator=teacher.givetOperator();

         textOne.setText(""+number1);

         textTwo.setText(""+number2);

         operatorLabel.setText(operator);

         message.setText("请回答");

textResult.setText(null);

       }

     if(【代码8) //判断事件源是否是giveAnwser

       {  String answer=textResult.getText();

          try{

               int result=Integer.parseInt(answer);

               if(teacher.getRight(result)==true)

               {  message.setText("你回答正确");

               }

               else

               { message.setText("你回答错误");

               }

             }

          catch(NumberFormatException ex)

             {  message.setText("请输入数字字符");

             }

       }

      textResult.requestFocus();

      validate();

   }

}

MainClass.java

public class MainClass

{ public static void main(String args[])

  {  ComputerFrame frame;

     frame=【代码9//创建窗口,其标题为:算术测试  

  }

}

4、编写一个带有窗口的应用程序。在窗口的北面添加一个下拉列表,该下拉列表有“红灯”、“绿灯”和“黄灯”三个选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。

程序模版

请按照模版要求,将【代码】替换为程序代码。

SignalCanvas.java

import java.awt.*;

public class SignalCanvas extends Canvas

{  int red,green,yellow,x,y,r;

   SignalCanvas()

   {  setBackground(Color.white);

   }

   public void setRed(int r)

   {   red=r;

   }

   public void setGreen(int g)

   {   green=g;

   }

   public void setYellow(int y)

   {   yellow=y;

   }

   public void setPosition(int x,int y)

   {  this.x=x;

      this.y=y;

   }

   public void setRadius(int r)

   {  this.r=r;

   }

   public void paint(Graphics g)

   {  if(red==1)

       {  g.setColor(Color.red);

       }

      else if(green==1)     

       {  g.setColor(Color.green);  

       }

     else if(yellow==1)

       {  g.setColor(Color.yellow);  

       }

      g.fillOval(x,y,2*r,2*r);

   }

}

SignalFrame.java

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class SignalFrame extends Frame implements ItemListener

{  Choice choice;

   SignalCanvas signal=null;

   String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";

   public SignalFrame()

   {  choice=【代码1          //创建choice

      【代码2                //创建choice添加itemRed

      【代码3                //创建choice添加itemYellow

      【代码4                //创建choice添加itemGreen 

      【代码5  //将当前窗口注册为choiceItemEvent事件监视器

      add(choice,BorderLayout.NORTH);

      try{  Class cs=Class.forName("SignalCanvas");

            signal=(SignalCanvas)cs.newInstance();

            add(signal,BorderLayout.CENTER);

          }

       catch(Exception e)

          { add(new Label("您还没有编写SignalCanvas"),BorderLayout.CENTER);

          }

      setBounds(100,100,360,300);

      setVisible(true);

      validate();

      addWindowListener(new WindowAdapter()

                        {  public void windowClosing(WindowEvent e)

                           {  System.exit(0);

                           }

                        }

                       );

   }

  public void itemStateChanged(ItemEvent e)

   {  String item= 【代码6  // choice返回被选中的条目

      int w=signal.getBounds().width;

      int h=signal.getBounds().height;

      int m=Math.min(w,h);

      signal.setRadius(m/6);

      if(item.equals(itemRed))

      { if(signal!=null)

         { signal.setRed(1);

           signal.setYellow(0);

           signal.setGreen(0);

           signal.setPosition(w/3,0);

           signal.repaint();

         }

      }

     else if(item.equals(itemYellow))

      { if(signal!=null)

         { signal.setRed(0);

           signal.setYellow(1);

           signal.setGreen(0);

           signal.setPosition(w/3,h/3);

           signal.repaint();

         } 

      }

     else if(item.equals(itemGreen))

      { if(signal!=null)

         { signal.setRed(0);

           signal.setYellow(0);

           signal.setGreen(1);

           signal.setPosition(w/3,2*h/3);

           signal.repaint();

         }

      }

   }

}

SignalMainClass.java

public class SignalMainClass

{ public static void main(String args[])

  {  SignalFrame frame;

     frame=new SignalFrame() ;

     frame.setTitle("信号灯"); 

  }

}

5、编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,拍Centerde布局是77列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonthpreviousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。

程序模版

请按照模版要求,将【代码】替换为程序代码。

CalendarBean.java

import java.util.Calendar;

public class CalendarBean

 { 

   String  day[];

   int year=2005,month=0;

   public void setYear(int year)

   {    this.year=year;

   }

   public int getYear()

   {    return year;

   }

   public void setMonth(int month)

   {    this.month=month;

   }

   public int getMonth()

   {    return month;

   }

   public String[] getCalendar()

   {   String a[]=new String[42];    

       Calendar 日历=Calendar.getInstance();

       日历.set(year,month-1,1);            

       int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;

       int day=0;

      if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

       {  day=31;

       }

     if(month==4||month==6||month==9||month==11)

       {  day=30;

       }

     if(month==2)

      {  if(((year%4==0)&&(year0!=0))||(year@0==0))

           {   day=29;

           }

         else

           {   day=28;

           }

      }

     for(int i=星期几,n=1;i<星期几+day;i++)

      {

         a[i]=String.valueOf(n) ;

         n++;

      } 

      return a;

   }

}

CalendarFrame.java

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class CalendarFrame extends Frame implements ActionListener

{    Label labelDay[]=new Label[42];

     Button titleName[]=new Button[7];

     String name[]={"","","","", "","",""};

     Button nextMonth,previousMonth;

     int year=2006,month=10;

     CalendarBean calendar;

     Label showMessage=new Label("",Label.CENTER);

     public CalendarFrame()

     {  Panel pCenter=new Panel();

       【代码1 //pCenter的布局设置为77列的GridLayout 布局。

        for(int i=0;i<7;i++)

        {  titleName[i]=new Button(name[i]);

          【代码2//pCenter添加组件titleName[i]

        }

        for(int i=0;i<42;i++)

        {

           labelDay[i]=new Label("",Label.CENTER);

          【代码3//pCenter添加组件labelDay[i]

        }

        calendar=new  CalendarBean();

        calendar.setYear(year);

        calendar.setMonth(month);

        String day[]=calendar.getCalendar();

        for(int i=0;i<42;i++)

        {  labelDay[i].setText(day[i]);

        }

        nextMonth=new Button("下月");

        previousMonth=new Button("上月");

        nextMonth.addActionListener(this);

        previousMonth.addActionListener(this);

        Panel pNorth=new Panel(),

              pSouth=new Panel();

        pNorth.add(previousMonth);

        pNorth.add(nextMonth);

        pSouth.add(showMessage);

        showMessage.setText("日历:"+calendar.getYear()+""+ calendar.getMonth()+"" );

        ScrollPane scrollPane=new ScrollPane();

        scrollPane.add(pCenter);

        【代码4// 窗口添加scrollPane在中心区域

        【代码5//  窗口添加pNorth 在北面区域

        【代码6// 窗口添加pSouth 在南区域。

     }

     public void actionPerformed(ActionEvent e)

     {  if(e.getSource()==nextMonth)

        { month=month+1;

          if(month>12)

              month=1;

          calendar.setMonth(month);

          String day[]=calendar.getCalendar();

          for(int i=0;i<42;i++)

           { labelDay[i].setText(day[i]);

           }

        }

       else if(e.getSource()==previousMonth)

        { month=month-1;

          if(month<1)

              month=12;

          calendar.setMonth(month);

          String day[]=calendar.getCalendar();

           for(int i=0;i<42;i++)

           {  labelDay[i].setText(day[i]);

           }

        }

       showMessage.setText("日历:"+calendar.getYear()+""+calendar.getMonth()+"" );

     }

}

 

CalendarMainClass.java

public class CalendarMainClass

{ public static void main(String args[])

  {   CalendarFrame frame=new CalendarFrame();

      frame.setBounds(100,100,360,300);

      frame.setVisible(true);

      frame.validate();

      frame.addWindowListener(new java.awt.event.WindowAdapter()

                               {  public void windowClosing(java.awt.event.WindowEvent e)

                                 {  System.exit(0);

                                 }

                               }

                             );

  }

}

 

6、首先编写一个封装一元二次方程的类,然后再编写一个窗口。要求窗口使用三个文本框和一个文本区,为方程对象中的数据提供试图,其中三个文本框用来显示和更新方程对象的系数;文本区对象用来显示方程的根。窗口中有一个按钮,用户单击该按钮后,程序用文本框中的数据修改方程的系数,并将方程的根显示在文本区中。

程序模版

请按照模版要求,将【代码】替换为程序代码。

SquareEquation.java

public class SquareEquation

{   double a,b,c;

    double root1,root2;

    public void setA(double a)

    { this.a=a;

    }

    public void setB(double b)

    { this.b=b;

    }

   public void setC(double c)

    { this.c=c;

    }

   public double  getRootOne() throws NoRealRootException,NoSquareEquationException

    {   if(a!=0)

        {  double disk=b*b-4*a*c;

           if(disk>=0)

             { root1=(-b+Math.sqrt(disk))/(2*a);

             }

           else

             {  throw new NoRealRootException("没有实根");

             }

        }

        else

        {

           throw new NoRealRootException("不是二次方程");

        }

        return root1;

    }

    public double  getRootTwo() throws NoRealRootException,NoSquareEquationException

    {   if(a!=0)

        {  double disk=b*b-4*a*c;

           if(disk>=0)

             { root2=(-b-Math.sqrt(disk))/(2*a);

             }

           else

             {  throw new NoRealRootException("没有实根");

             }

        }

        else

        {

           throw new NoRealRootException("不是二次方程");

        }

        return root2;

    }

}

class NoRealRootException extends Exception

{  String message;

   NoRealRootException(String s)

   {   message=s;

   }

   public String getMessage()

   {   return message;

   }

}

class NoSquareEquationException extends Exception

{  String message;

   NoSquareEquationException(String s)

   {   message=s;

   }

   public String getMessage()

   {   return message;

   }

}

EquationFrame.java

import java.awt.*;

import java.awt.event.*;

public class EquationFrame extends Frame implements ActionListener

{  SquareEquation equation;

   TextField textA,textB,textC;

   TextArea showRoots;

   Button controlButton;

   public EquationFrame()

   {  equation=new SquareEquation();

      textA=new TextField(8);  

      textB=new TextField(8);

      textC=new TextField(8);

      showRoots=new TextArea();

      controlButton=new Button("确定");

      Panel pNorth=new Panel();

      pNorth.add(new Label("二次项系数:"));

      pNorth.add(textA);

      pNorth.add(new Label("一次项系数:"));

      pNorth.add(textB);

      pNorth.add(new Label("常数项系数:"));

      pNorth.add(textC);

      pNorth.add(controlButton);

     【代码1  //当前窗口作为controlButtonActionEvent事件的监视器

      add(pNorth,BorderLayout.NORTH);

      add(showRoots,BorderLayout.CENTER);

      setBounds(100,100,630,160);

      setVisible(true);

      validate();

      addWindowListener(new WindowAdapter()

                        {  public void windowClosing(WindowEvent e)

                           {  System.exit(0);

                           }

                        }

                       );

   }

  public void actionPerformed(ActionEvent e)

   {  try{

            double a=Double.parseDouble(【代码2);   //textA调用方法获取其中的文本

                double b=Double.parseDouble(【代码3); //textB调用方法获取其中的文本           double c=Double.parseDouble(【代码4);  // textC调用方法获取其中的文本

            equation.setA(a);

            equation.setB(b);

            equation.setC(c);

            textA.setText(""+a);

            textB.setText(""+b);

            textC.setText(""+c);

            showRoots.append("\n 根:"+equation.getRootOne());

            showRoots.append("   根:"+equation.getRootTwo());

         }

      catch(Exception ex)

         {  showRoots.append("\n"+ex+"\n");

         }

   }

}

EquationMainClass.java

public class EquationMainClass

{ public static void main(String args[])

  {   EquationFrame frame=new EquationFrame();

  }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有