使用java编写一个简易计算器

前言

制作一个如图所示的简易计算器,要求具有加减清空功能。
如图所示

代码片段

import javax.swing.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class Step3_1 {
    JFrame step3 = new JFrame("简易计算器");     //显示界面标题
    JButton button1 = new JButton("相加");       //创建一个按钮
    JButton button2 = new JButton("相减");        //创建一个按钮
    JButton button3 = new JButton("全部清零");    //创建一个按钮
    JLabel text1 = new JLabel("运算数一");          //创建一个文本
    JLabel text2 = new JLabel("运算数二");          //创建一个文本
    JLabel text3 = new JLabel("运算结果");          //创建一个文本
    JLabel text = new JLabel("简易运算器");          //创建一个文本
    JTextField jet1 = new JTextField(30);       //创建一个输入框
    JTextField jet2 = new JTextField(30);       //创建一个输入框
    JTextField jet3 = new JTextField(30);       //创建一个输入框
    public Step3_1 () {
        step3.setLayout(null);                          //清空布局管理器
        step3.setSize(300,350);            //设置系统框的大小
        button1.setSize(60,30);            //设置按钮的大小
        button2.setSize(60,30);            //设置按钮的大小
        button3.setSize(100,30);           //设置按钮的大小
        button1.setLocation(70,200);              //设置按钮的位置(相对与系统框的左上角)
        button2.setLocation(150,200);             //设置按钮的位置(相对与系统框的左上角)
        button3.setLocation(85,250);              //设置按钮的位置(相对与系统框的左上角)
        button1.addActionListener(new event1(jet1,jet2,jet3));       //添加事件监听器(为后面创建响应做准备)
        button2.addActionListener(new event2(jet1,jet2,jet3));       //添加事件监听器(为后面创建响应做准备)
        button3.addActionListener(new event3(jet1,jet2,jet3));       //添加事件监听器(为后面创建响应做准备)
        text1.setSize(70,30);
        text2.setSize(70,30);
        text3.setSize(70,30);
        text.setSize(160,30);
        text.setFont(new Font("宋体",Font.PLAIN,20));     //设置字体格式
        text1.setLocation(30,50);
        text2.setLocation(30,100);
        text3.setLocation(30,150);
        text.setLocation(85,10);
        jet1.setSize(90,30);
        jet2.setSize(90,30);
        jet3.setSize(90,30);
        jet1.setLocation(150,50);
        jet2.setLocation(150,100);
        jet3.setLocation(150,150);
        jet3.setEditable(false);
        step3.add(jet1);step3.add(jet2);step3.add(jet3);                        //将以上内容添加到step3中
        step3.add(text1);step3.add(text2);step3.add(text3);step3.add(text);     //将以上内容添加到step3中
        step3.add(button1);step3.add(button2);step3.add(button3);               //将以上内容添加到step3中
        step3.setResizable(false);                  //表示不可以由用户自定义窗口大小
//        step3.setLocation(600,100);
        step3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       //设置默认的关闭操作,”在关闭动作时退出“
        step3.setVisible(true);                     //将其改为可见
    }

/*
 *此函数作用为:判断传入数据是否为浮点数/整数
 */

    public  boolean num(String n)
    {
        int count=0;
        char ch =n.charAt(0);
        if (ch == '-' || ch >= '0' && ch <= '9')
        {
            for (int i = 1; i < n.length(); i++)
            {
                ch = n.charAt(i);
                if (Character.isDigit(ch) && ch != '.')
                    return false;
                if (ch == '.')
                    count++;
            }
            return count < 2 && ch != '.';
        }
        return false;
    }

/*
 *次函数作用为:两数相加,并将结果输出到jet3中
 */

     class event1 implements ActionListener{
         JTextField num1=null;
         JTextField num2=null;
         JTextField num3=null;
         public event1(JTextField jet1,JTextField jet2,JTextField jet3)
         {
             num1=jet1;
             num2=jet2;
             num3=jet3;
         }
         public void actionPerformed(ActionEvent actionEvent) {
             String st1=num1.getText();
             String st2=num2.getText();
             if (st1.equals(" ") || st2.equals(" "))
                 JOptionPane.showMessageDialog(null,"请输入数字");
             else if(!num(st1) || !num(st2))
                 JOptionPane.showMessageDialog(null,"请输入数字");
             else
             {
                 double a = Double.parseDouble(st1);
                 double b = Double.parseDouble(st2);
                 num3.setText(Double.toString(a+b));
             }
         }

         }

/*
 *此函数作用为:两数相减,并将结果输入到jet3中
 */

    class event2 implements ActionListener{
        JTextField num1=null;
        JTextField num2=null;
        JTextField num3=null;
        public event2(JTextField jet1,JTextField jet2,JTextField jet3)
        {
            num1=jet1;
            num2=jet2;
            num3=jet3;
        }
        public void actionPerformed(ActionEvent actionEvent) {
            String st1=num1.getText();
            String st2=num2.getText();
            if (st1.equals(" ") || st2.equals(" "))
                JOptionPane.showMessageDialog(null,"请输入数字");
            else if(!num(st1) || !num(st2))
                JOptionPane.showMessageDialog(null,"请输入数字");
            else
            {
                double a = Double.parseDouble(st1);
                double b = Double.parseDouble(st2);
                jet3.setText(Double.toString(a-b));
            }
        }


    }

/*
 *此函数作用为:将jet1-3的数值清空
 */

    class event3 implements ActionListener {
        JTextField num1 = null;
        JTextField num2 = null;
        JTextField num3 = null;

        public event3(JTextField jet1, JTextField jet2, JTextField jet3) {
            num1 = jet1;
            num2 = jet2;
            num3 = jet3;
        }

        public void actionPerformed(ActionEvent actionEvent) {
            num1.setText("");
            num2.setText("");
            num3.setText("");
        }

    }

    public static void main(String[] args) {
        new Step3_1();
    }
}

相关代码、函数解释

Java Swing JTextField:单行文本框组件

JTextField类实现一个单行文本框,它允许用户输入单行的文本信息。该类的常用构造方法如下:

  • JTextField():创建一个默认的文本框。
  • JTextField(String text):创建一个指定初始化文本信息的文本框。
  • JTextField(int columns):创建一个指定列数的文本框。
  • JTextField(String text,int columns):创建一个既指定初始化文本信息,又指定列数的文本框。
    123

setLayout(null)意义

在未设置Layout时,java默认为flowLayout(流式)布局,设置为null即为清空布局管理器,之后添加组件,常常是设置组件左上角坐标相对于容器左上角(0,0)的x,y值来确定组件的位置,即使更改容器大小也不会改变位置。这种方式常常用于窗体大小固定的容器里。
嗯嗯

setResizable

如果传值为false,表示窗口界面不允许用户进行自行拖拽放大,只由程序员写代码时进行变化
如果传值为true,表示可以由用户进行自行拖拽放大。

setEditable

此函数在不调用的时候默认为true,当此函数为false,则代表其控件不可以使用,适用于对于计算器计算值的实现

setDefaultCloseOperation

正如函数所表达的一样,该函数作用为设置默认的关闭操作,一般默认关闭操作为点击关闭时将窗口进行隐藏,因此需要设置为YOUR_NAME.EXIT_ON_CLOSE
如果需要更多知识,点我

setVisible

此函数实现为将其窗口设置为可见,所以传值为true,,若为false,则不会显示窗口

charAt

charAt()方法返回指定索引位置的char值。索引范围为0~length()-1,如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符。

详情点我

actionPerformed

在实现方法时需要对其进行重写

一般情况下,这是在编写GUI程序时,组件发生“有意义”的事件时会调用这个方法,比如按钮被按下,文本框内输入回车时都会触发这个事件,然后调用你编写的事件处理程序。
实现过程大体如下:编写一个ActionListener类的侦听器,组件注册该侦听器,侦听器内部要编写这个actionPerformed方法

showMessageDialog

使用消息提示框进行提示信息
详情点我

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值