美文网首页
利用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制作简单的计算器

    利用Java的GUI制作简单的计算器 1、利用GUI实现界面布局 首先是设计该程序的图形化界面,创建两个JPane...

  • 利用Python制作简单的GUI界面软件

    Python有个内置库tkinter,利用它可以很轻松做出一些简易的UI界面,首先来看Python官方对Tkint...

  • 如何利用Intellij idea的GUI Designer设计

    简述如何利用intellij自带的Gui designer设计GUI 1. 新建java项目 2.新建GUI Fo...

  • Matlab-GUI编程:简单计算器的实现

    前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了。上个学期学java的时候GUI着实不...

  • IntelliJ IDE 开发Java GUI 入门

    本博客主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期...

  • Python的第一个GUI程序

    Tkinter是Python的标准GUI库,简单实用,适合初学者。下面利用Tkinter来实现第一个简单的GUI程...

  • PyQt5创建GUI界面之一

    一, 利用designer设计的GUI 1.1 使用designer设计一个简单的GUI界面,含有一个'Quit'...

  • Java计算器

    本篇博客将利用“后缀表达式”,100多行Java代码( 不包括注释 )实现一个简单强大的计算器,支持的运算符包括加...

  • JavaScript制作简单计算器

    JavaScript经典小项目——制作简单的计算器功能使用JS完成一个简单的计算器 功能。实现2个输入框中输入整...

  • 简单计算器制作

    最近在学习PHP的基本内容,感觉一直自己可以看懂程序,可会改程序,但是为什么让自己按需要写一个程序的时候就会很难,...

网友评论

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

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