zoukankan      html  css  js  c++  java
  • 实验六 图形用户界面

    实验六 图形用户界面

    一、实验目的

    1.掌握常用GUI控制组件的使用方法。

    2.掌握事件处理的方法。

    3.了解swing控件的概念。

    二、实验内容

    1. 设计一款简易计算器
    2. 布局参考下图:

    3.实现计算器的基本功能。

    三.教学要求

    1.实验前须复习的课程内容:

    [1]掌握常用GUI控制组件的使用方法。

    [2]掌握事件处理的方法。

    [3]了解swing控件的概念。

    2.实验预习报告要求:

    实验预习报告要求有实验目的,实验内容,实验步骤和编程代码。

    3.实验要求:

    [1]对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。

    [2]写出实验报告。报告要求:有实验目的,实验内容,实验步骤,调试完成的准确编程代码,实验小结,回答问题。

    package Calculator;

    import javax.swing.*;

    import javax.swing.JTextField;

    import java.awt.*;

    import java.awt.event.*;

    import java.lang.*;

    import java.awt.Color;

    public class Calculator extends JFrame implements ActionListener

    {

      private JPanel p1 = new JPanel(); //创建面板

      private JPanel p2 = new JPanel();

      private JTextField t1;   //文本框1用来显示输入信息

      private JTextField t2;   //文本框2用来显示结果信息

      private JLabel label;    //标签信息

      StringBuffer str;      //显示屏所显示的字符串 

      double x,y;         //x和y都是运算数 

      int z;           //Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"     

      private JButton b[] = new JButton[12]; //创建一个有12个按钮的数组

      private JButton b1,b2,b3,b4,b5,b6,b7,b8; //算术功能按钮

      public Calculator()

      {

        super("简易计算器");   //窗口名称

        Container c = getContentPane(); //创建内容面板对象

        t1 = new JTextField(30);

        t1.setEditable(false); //只能显示,不能编辑

        t2 = new JTextField(30);

        t2.setEditable(false); //只能显示,不能编辑

        label = new JLabel("欢迎使用计算器1.0版");

        label.setForeground(Color.blue);

      

        str=new StringBuffer(); 

       

        p2.add(label); //添加标签到面板

        p2.add(t2);   //添加文本框到面板

        p2.add(t1);   //添加文本框到面板

        p2.setLayout(new GridLayout(4,1)); //把面扳布局为4行1列

        for(int i=0;i<10;i++)  //分别为数组中0~9号的按钮设置标签,并注册监听器

        {

          String s=""+i;

          b[i]= new JButton(s);  

          b[i].addActionListener(this);  

        }

         

        //实例化各个按钮

        b[10]= new JButton("1/X"); b[11]= new JButton(".");

        b1= new JButton("/");    b2= new JButton("X^2");

        b3= new JButton("*");    b4= new JButton("CE");

        b5= new JButton("+");    b6= new JButton("Sqrt");

        b7= new JButton("-");    b8= new JButton("=");

         

        //设置按钮前景色

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

        {

          b[i].setForeground(Color.blue);

        }

        b1.setForeground(Color.red);  b3.setForeground(Color.red);

        b5.setForeground(Color.red);  b7.setForeground(Color.red);

        b2.setForeground(Color.blue);  b4.setForeground(Color.blue);

        b6.setForeground(Color.red);   b8.setForeground(Color.blue);

         

        //添加到面板

        p1.add(b[10]); p1.add(b2); p1.add(b6); p1.add(b4);

        p1.add(b[7]); p1.add(b[8]); p1.add(b[9]); p1.add(b5);

        p1.add(b[4]); p1.add(b[5]); p1.add(b[6]); p1.add(b7);

        p1.add(b[1]); p1.add(b[2]); p1.add(b[3]); p1.add(b3);

        p1.add(b[0]); p1.add(b[11]); p1.add(b8);p1.add(b1);

        p1.setLayout(new GridLayout(5,4));

         

        //注册监听器

        b[10].addActionListener(this); b[11].addActionListener(this);

        b1.addActionListener(this); b2.addActionListener(this);

        b3.addActionListener(this); b4.addActionListener(this);

        b5.addActionListener(this); b6.addActionListener(this);

        b7.addActionListener(this); b8.addActionListener(this);

       

        //将面板添加到内容面板

        c.add(p2);

        c.add(p1);

        c.setLayout(new FlowLayout()); //设置为顺序布局

         

         

         

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭动作

        setVisible(true);  //设置为可见

        setResizable(false); //禁止调整框架大小

        setSize(400,300);  //设置窗口大小

      }

       

      //主方法实现创建一个窗口

      public static void main(String[] args)

      { Calculator f = new Calculator(); }

       

      //按钮的事件处理

      public void actionPerformed(ActionEvent e)

      {

      try

      {

        if(e.getSource()==b4)  //选择"C"清零

        {

          t1.setText("0"); //把文本框清零

          t1.setHorizontalAlignment(JTextField.RIGHT);  //文本对齐右边

          str.setLength(0); //清空字符串缓冲区以准备接收新的输入运算数

        }

        else if(e.getSource()==b[10])//单击"+/-"选择输入的运算数是正数还是负数 

        {

          x=Double.parseDouble(t1.getText().trim());//trim函数作用是去掉字符串中的空格

          t1.setText(""+(1/x));

          t1.setHorizontalAlignment(JTextField.RIGHT);

        }

        else if (e.getSource()==b5)//单击加号按钮获得x的值和z的值并清空y的值

        {

          x=Double.parseDouble(t1.getText().trim());

          str.setLength(0);

          y=0d;

          z=0;

        }

        else if(e.getSource()==b7)//单击减号按钮获得x的值和z的值并清空y的值 

        {

          x=Double.parseDouble(t1.getText().trim());

          str.setLength(0);

          y=0d;

          z=1;

        }

        else if(e.getSource()==b3)//单击乘号按钮获得x的值和z的值并清空y的值 

        {

          x=Double.parseDouble(t1.getText().trim());

          str.setLength(0);

          y=0d;

          z=2;

        }

        else if(e.getSource()==b1)//单击除号按钮获得x的值和z的值并清空y的值 

        {

          x=Double.parseDouble(t1.getText().trim());

          str.setLength(0);

          y=0d;

          z=3;

        }

        else if(e.getSource()==b8)//单击等号按钮输出计算结果 

        {

          str.setLength(0);

          switch(z)

          {

            case 0: t1.setText(""+(x+y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;

            case 1: t1.setText(""+(x-y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;

            case 2: t1.setText(""+(x*y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;

            case 3: t1.setText(""+(x/y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;

          }

        }

        else if(e.getSource()==b[11])//单击"."按钮输入小数 

        {

          if(t1.getText().trim().indexOf('.')!=-1)//判断字符串中是否已经包含了小数点

          {

          }

          else //如果没有小数点

          {

            if(t1.getText().trim().equals("0"))//如果初时显示为0 

            {

              t1.setText(str.append(e.getActionCommand()).toString());

              t1.setHorizontalAlignment(JTextField.RIGHT);

            }

            else if(t1.getText().trim().equals(""))//如果初时显示为空则不做任何操作

            {}

            else

            { 

              t1.setText(str.append(e.getActionCommand()).toString()); 

              t1.setHorizontalAlignment(JTextField.RIGHT);

            }

          }

        y=0d;

        }

        else if(e.getSource()==b6) //求平方根 

        {

          x=Double.parseDouble(t1.getText().trim()); 

          if(x<0)

          {

            t1.setText("数字格式异常");

            t1.setHorizontalAlignment(JTextField.RIGHT);

          }

          else

          {

            t1.setText(""+Math.sqrt(x));

            t1.setHorizontalAlignment(JTextField.RIGHT);

          }

          str.setLength(0);

          y=0d;

        }

        else

        {

          if(e.getSource()==b[0])//如果选择的是"0"这个数字键 

          {

            if(t1.getText().trim().equals("0"))//如果显示屏显示的为零不做操作 

            {}

            else

              t1.setText(str.append(e.getActionCommand()).toString());

              t1.setHorizontalAlignment(JTextField.RIGHT);

              y=Double.parseDouble(t1.getText().trim()); 

          }

          else if (e.getSource()==b2) //选择的是平方键

          {

                 x=Double.parseDouble(t1.getText().trim());

                 t1.setText(""+Math.pow(x,2));

              t1.setHorizontalAlignment(JTextField.RIGHT);

              str.setLength(0);

              y=0d;

          }

          else

            {

            t1.setText(str.append(e.getActionCommand()).toString()); 

            t1.setHorizontalAlignment(JTextField.RIGHT);

            y=Double.parseDouble(t1.getText().trim());

            }

          }

        }

        catch(NumberFormatException e1){ t1.setText("数字格式异常");

        t1.setHorizontalAlignment(JTextField.RIGHT); } 

        catch(StringIndexOutOfBoundsException e1){t1.setText("字符串索引越界");

        t1.setHorizontalAlignment(JTextField.RIGHT);} 

      }

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/fx0102/p/13196165.html
Copyright © 2011-2022 走看看