美文网首页
利用Java的GUI制作简单的计算器

利用Java的GUI制作简单的计算器

作者: 忒无聊了叭 | 来源:发表于2019-10-04 11:13 被阅读0次

    利用Java的GUI制作简单的计算器

    import java.awt.*;
    ​
    import java.awt.event.*;
    ​
    import javax.swing.*;
    ​
    public class JCalculator extends JFrame implements ActionListener {
    ​
    private class WindowCloser extends WindowAdapter {
    ​
    •      public void windowClosing(WindowEvent we) {
    ​
    •          System.exit(0);
    ​
    •      }
    ​
    •    }
    ​
    •    int i;
    ​
    •    //  final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
    ​
    •    private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
    ​
    •          "2", "3", "-", ".", "0", "=", "+" };
    ​
    •    // 创建16个按钮
    ​
    •    JButton[] buttons = new JButton[str.length];
    ​
    •    //创建重置键CE
    ​
    •    JButton reset = new JButton("CE");
    ​
    •    //创建显示器,初始值为0
    ​
    •    JTextField display = new JTextField("0");
    ​
    ​
    ​
    •    public JCalculator() {
    ​
    •      super("计算器");
    ​
    •      //JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类
    ​
    •      JPanel panel1 = new JPanel();
    ​
    •      //在容器中设置布局为GridLayout,并创建一个4*4的区域
    ​
    •      panel1.setLayout(new GridLayout(4,4));
    ​
    •      //将字符串中的常量赋值给按钮
    ​
    •      for (i = 0; i < str.length; i++) {
    ​
    •          buttons[i] = new JButton(str[i]);
    ​
    •          panel1.add(buttons[i]);
    ​
    •      }
    ​
    ​
    ​
    •      JPanel panel2 = new JPanel();
    ​
    •      //在panel2的容器中设置的布局为BorderLayout
    ​
    •      panel2.setLayout(new BorderLayout());
    ​
    •      //在panel2容器中显示屏和重置按钮的位置
    ​
    •      panel2.add("Center", display);
    ​
    •      panel2.add("East", reset);
    ​
    •      // JPanel panel3 = new Panel();
    ​
    •      //getContentPane()作用是初始化一个容器,设置布局格式为BorderLayout
    ​
    •      getContentPane().setLayout(new BorderLayout());
    ​
    •      //该容器包含panel2和panel1容器,设置他们的位置
    ​
    •      getContentPane().add("North", panel2);
    ​
    •      getContentPane().add("Center", panel1);
    ​
    •      // 为panel1中的每个按钮添加监听器
    ​
    •      for (i = 0; i < str.length; i++)
    ​
    •          buttons[i].addActionListener(this);
    ​
    •      // 为显示屏和CE重置按钮添加监听器
    ​
    •      reset.addActionListener(this);
    ​
    •      display.addActionListener(this);
    ​
    •      // The "close" button "X".
    ​
    •      addWindowListener(new WindowCloser());
    ​
    ​
    ​
    •      setSize(800, 800);
    ​
    •      //让JFrame对象显示出来:
    ​
    •      setVisible(true);
    ​
    •      // pack的作用是调整窗口的大小,使其适应组件的大小和布局。
    ​
    •      pack();
    ​
    •    } 
    ​
    ​
    ​
    •    public void actionPerformed(ActionEvent e) {
    ​
    •      Object target = e.getSource();
    ​
    •      String label = e.getActionCommand();
    ​
    •      if (target == reset) {
    ​
    •      handleReset();        //CE重置方法
    ​
    •      }
    ​
    •      else if ("0123456789.".indexOf(label) >= 0) {
    ​
    •      handleNumber(label);  //输入的是数字或小数点
    ​
    •      }
    ​
    •      else
    ​
    •          handleOperator(label);  //输入的是符号,进行运算
    ​
    •    }
    ​
     boolean isFirstDigit = true;
    ​
    ​
    ​
     public void handleReset() {
    ​
     display.setText("0");
    ​
     isFirstDigit = true;
    ​
     operator = "=";
    ​
     //注意在点击CE之后一定要重置isFirstDight和operator
    ​
    //   System.out.println("CE之后的isDight  "+isFirstDigit);
    ​
     }
    ​
     public void handleNumber(String label) {
    ​
     if(isFirstDigit) {
    ​
     //判断是不是第一下按下
    ​
     if(label.equals(".")) {
    ​
     display.setText("0.");
    ​
     }else {
    ​
     display.setText(label);
    ​
     }
    ​
     }else if((label.equals("."))&&(display.getText().indexOf(".")<0)){
    ​
     //判断该符号是不是点,然后确定小数点在之前有没有出现过
    ​
     //如果符合条件,将显示屏上之前的数字加上一个小数点
    ​
     display.setText(display.getText()+".");
    ​
     }else if(!label.equals(".")) {
    ​
     //判断输入非首位的数字
    ​
     display.setText(display.getText()+label);
    ​
     }
    ​
     isFirstDigit = false;
    ​
     }
    ​
     double number = 0.0;
    ​
     String operator = "=";
    ​
     public void handleOperator(String label) {
    ​
     if(operator.equals("+")){
    ​
     //把数字类型的字符串,转换成Double类型
    ​
     number += Double.valueOf(display.getText());
    ​
     }
    ​
     else if(operator.equals("-")){
    ​
     number -= Double.valueOf(display.getText());
    ​
     }
    ​
     else if(operator.equals("*")){
    ​
     number *= Double.valueOf(display.getText());
    ​
     }
    ​
     else if(operator.equals("/")){
    ​
     number /= Double.valueOf(display.getText());
    ​
     }
    ​
     else if(operator.equals("=")){
    ​
     number = Double.valueOf(display.getText());
    ​
     }
    ​
     display.setText(String.valueOf(number));
    ​
     operator = label;
    ​
     isFirstDigit = true;
    ​
     }
    ​
    •    public static void main(String[] args) {
    ​
    •      new JCalculator();
    ​
    •    }
    ​
    }
    

    1、利用GUI实现界面布局

    首先是设计该程序的图形化界面,创建两个JPanel对象,JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类,在第一个JPanel对象中以GridLayout为布局,创建一个4*4的空间,把这些空间分配给字符串中的16个常量(数字和符号),第二个JPanel对象以BorderLayout为布局,分配好显示框和CE重置按钮的空间。然后再利用getContentPane()设置新的容器,将布局设置为BorderLayout,然后分配好两个JPanel的空间。这样计算器的GUI界面就写好了。如图所示:

    GUI计算器.png

    2、计算器计算功能的实现

    (1)actionPerformed()方法,该方法中含有e.getSource()和e.getActionCommand()监听鼠标事件,判断如果点击CE按钮,执行handleReset()方法重置计算器。如果点击的数字,执行handleNumber(label)方法,如果点击的是符号,执行handleOperator(label)方法。

    (2)handleNumber(label)方法,该方法可以显示鼠标点击的数字和小数点,在方法外设置全局变量isFirstDigit,判断是不是在之前有没有输入过,如果为true代表首次输入,进入该语句中,再次进行判断,如果输入的为小数点,显示器显示0.,如果输入的数字,显示器原本的0将消除,剩下输入的数字,执行完if语句后isFirstDigit 设置为 false。第二个判断是判断该符号是不是点,然后确定小数点在之前有没有出现过,如果没有出现过在显示器上加上一个小数点,第三个判断是判断是不是数字,是数字的将在显示器继续显示,并且之前的数字不会消失。

    (3) handleReset()方法,该方法是重置显示器上的数字,显示器将被设置显示为0,并且isFirstDigit和operator都被重置。

    (4)handleOperator(label)方法,该方法对可以进行运算,当输入完第一个运算数字后,输入运算符,设置operator的全局变量为“=”,在该方法中以“=”为判断,将第一个数字可以保存在number中,新的运算符将会保存在operator中,同时isFirstDigit设置为true,代表开始输入第二个数字,当输入完后点击运算符,进入handleOperator(label)方法,会对两数字进行上一个运算符的运算,然后显示在显示器上。注意,在进行运算时,要用Double.valueOf将字符串改成Double形式。

    相关文章

      网友评论

          本文标题:利用Java的GUI制作简单的计算器

          本文链接:https://www.haomeiwen.com/subject/saojpctx.html