Java图形化界面编程实现简单计算器

作者:智子、 时间:2021-06-06 17:23:09 

1.简单计算器

使用AWT编程,FrameNORTH区域放置TextField组件,将指定为4行5列GridLayout布局管理器的Panel放置于Frame中部区域,其中填充操作符和操作数按钮。
 按钮触发事件源,对按钮添加ActionListener注册监听。自定义NumListener(操作数监听类)、OperatListener(操作符监听类)、EqualListener(’=‘符监听类)和匿名内部类(如b[11]’-'符监听类)分情况对按钮事件进行监听并响应。
注意:整数、浮点、负数以及连续运算均可以。

 Java图形化界面编程实现简单计算器

 Java图形化界面编程实现简单计算器

代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import static java.awt.Color.blue;

public class Calculation {
    //操作数
    double x,y;
    String op;
    boolean flag;
    Frame frame = new Frame("智子的计算器!");
    TextField tf = new TextField(30);
    Button[] b = new Button[20];

    public void init(){
        //北部区域放置文本框
        frame.add(tf,BorderLayout.NORTH);
        Panel panel = new Panel();
        panel.setLayout(new GridLayout(4,5,2,2));
        //设置按钮
        String s = "+-*/%";
        for(int i=0;i<10;i++) {//运算数
            b[i] = new Button(i + "");
            b[i].setForeground(blue);
        }
        for(int i=0;i<5;i++) {//运算符
            b[i+10]=new Button(s.charAt(i)+"");
            b[i+10].setForeground(blue);
        }
        String[] t = {"sqrt","^2","^3","=","."};
        for(int i=0;i<5;i++){
            b[i+15]=new Button(t[i]);
            b[i+15].setForeground(blue);
        }

        //按钮注册监听
        for (int i = 0; i < 10; i++) {//操作数注册监听
            b[i].addActionListener(new NumListener());
        }

        for (int i = 10; i < 18; i++) {//操作符注册监听
            if(i==11) continue;
            b[i].addActionListener(new OperatListener());
        }
        b[11].addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(!flag){
                    tf.setText("-");
                    flag = true;
                } else {
                    x = Double.parseDouble(tf.getText());
                    op = e.getActionCommand();
                    flag = false;
                }
            }
        });
        //“=”注册监听
        b[18].addActionListener(new EqualListener());
        //“.”注册监听
        b[19].addActionListener(new NumListener());

        //将按钮加入panel
        for (int i = 0; i < 20; i++) {
            panel.add(b[i]);
        }

        //设置中部按钮
        frame.add(panel);

        //窗口 * 注册监听
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //设置窗口最优并可见
        frame.pack();
        frame.setVisible(true);
    }

    //数字按钮 * 类
    public class NumListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            String t = e.getActionCommand();
            String s = tf.getText();
            if(flag==false)
                tf.setText(t);
            else
                tf.setText(s+t);
            flag = true;
        }
    }

    //操作符按钮 * 类
    public class OperatListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            x = Double.parseDouble(tf.getText());
            op = e.getActionCommand();
            flag = false;
        }
    }

    //等号按钮 * 类
    public class EqualListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            y = Double.parseDouble(tf.getText());
            flag = true;
            switch(op){
                case "+":tf.setText(x+y+"");
                    break;
                case "-":tf.setText(x-y+"");
                    break;
                case "*":tf.setText(x*y+"");
                    break;
                case "/":
                    if(y!=0)
                        tf.setText(x/y+"");
                    else
                        tf.setText("inf");
                    break;
                case "%":tf.setText(x%y+"");
                    break;
                case "sqrt":tf.setText((int)Math.sqrt(x)+"");
                    break;
                case "^2":tf.setText(y*y+"");
                    break;
                case "^3":tf.setText(y*y*y+"");
                    break;
            }
        }
    }

    public static void main(String[] args) {

        new Calculation().init();
    }
}

来源:https://blog.csdn.net/qq_55799677/article/details/122191710

标签:Java,实现,计算器
0
投稿

猜你喜欢

  • 使用SpringBoot注解方式处理事务回滚实现

    2023-04-30 13:59:19
  • struts2实现文件上传显示进度条效果

    2021-11-19 16:16:21
  • java 动态生成SQL的实例讲解

    2021-05-25 18:26:06
  • C#使用虚拟方法实现多态

    2023-01-01 05:21:08
  • Mybatis关于动态排序 #{} ${}问题

    2023-09-01 17:34:57
  • 图文详解Maven工程打jar包的N种方式

    2022-12-12 21:36:23
  • java实现解析二进制文件的方法(字符串、图片)

    2023-04-18 19:07:51
  • C#中抽象方法与虚拟方法的区别

    2021-10-30 07:30:15
  • Centos中安装jdk案例讲解

    2023-04-30 00:37:50
  • Java Timezone类常见问题_动力节点Java学院整理

    2023-08-23 01:30:11
  • SpringCloud中Eureka的配置及使用讲解

    2022-04-19 19:16:28
  • Java中方法重写与重载的区别

    2022-07-25 04:49:01
  • 详谈java命令的本质逻辑揭秘

    2022-03-02 05:26:32
  • 关于Scanner对象的输入结束标记问题

    2022-02-20 08:02:11
  • java使double保留两位小数的多方法 java保留两位小数

    2023-06-17 14:01:30
  • Java中使用websocket实现在线聊天功能

    2023-01-03 22:07:20
  • jvm运行原理以及类加载器实例详解

    2023-10-23 18:39:03
  • Android下的CMD命令之关机重启及重启recovery

    2023-06-20 23:08:21
  • 详解Spring Boot自动装配的方法步骤

    2023-11-18 15:02:18
  • Android6.0获取动态权限代码示例

    2022-07-22 10:35:15
  • asp之家 软件编程 m.aspxhome.com