Java - GUI界面实现简单计算器

一、功能介绍

  • (1)实现基本的加减乘除功能。
  • (2)使用匿名类为加减乘除按键设置监听器 。
  • (3)监听器的基本应用。

学习了GUI界面,没用具体的应用,在这里简单的编写一个计算器的应用。

二、代码实现

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

    public class example10 {
        private static void createAndShowGUI()
        {
            //创建一个顶级容器
            JFrame jFrame=new JFrame("计算器");
            jFrame.setLayout(new BorderLayout());
            //设置容器大小
            jFrame.setSize(250,300);
            //用来显示相对于界面的位置
            jFrame.setLocation(400,400);
            //创建一个网格式面板,并添加到容器里边
            JPanel jPanel=new JPanel(new GridLayout(4,4,10,25));
            JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.CENTER,10,25));
            //创建一个文本框显示界面
            JTextField jTextField=new JTextField(20);
            //用来记录用户所输入的数字和字符串
            List<String> lists=new ArrayList<String>();
            jPanel.add(jTextField);
            String [] strings=new String[] {"1","2","3","+","4","5","6","-","7","8","9","*",
                    ".","0","=","/"};
            String [] st=new String[]{"AC","BECK","CE"};
            //添加按键 AC CE BECK
            JButton AC=new JButton(st[0]);
            JButton Beck=new JButton(st[1]);
            JButton CE=new JButton(st[2]);
            //将上边三个按键添加到面板上
            jPanel1.add(AC);
            jPanel1.add(Beck);
            jPanel1.add(CE);
            //添加按钮 "1","2","3","+","4","5","6","-","7","8","9","*",".","0","=","/"
            JButton jButton1=new JButton(strings[0]);
            JButton jButton2=new JButton(strings[1]);
            JButton jButton3=new JButton(strings[2]);
            JButton add=new JButton(strings[3]);
            JButton jButton4=new JButton(strings[4]);
            JButton jButton5=new JButton(strings[5]);
            JButton jButton6=new JButton(strings[6]);
            JButton sum=new JButton(strings[7]);
            JButton jButton7=new JButton(strings[8]);
            JButton jButton8=new JButton(strings[9]);
            JButton jButton9=new JButton(strings[10]);
            JButton ChenFa=new JButton(strings[11]);
            JButton Point=new JButton(strings[12]);
            JButton jButton0=new JButton(strings[13]);
            JButton result=new JButton(strings[14]);
            JButton ChuFa=new JButton(strings[15]);
            //将按键添加到面板上
            jPanel.add(jButton1);
            jPanel.add(jButton2);
            jPanel.add(jButton3);
            jPanel.add(add);
            jPanel.add(jButton4);
            jPanel.add(jButton5);
            jPanel.add(jButton6);
            jPanel.add(sum);
            jPanel.add(jButton7);
            jPanel.add(jButton8);
            jPanel.add(jButton9);
            jPanel.add(ChenFa);
            jPanel.add(Point);
            jPanel.add(jButton0);
            jPanel.add(result);
            jPanel.add(ChuFa);
            //将面板加到容器里边
            jFrame.add(jTextField,BorderLayout.PAGE_START);
            jFrame.add(jPanel1,BorderLayout.CENTER);
            jFrame.add(jPanel,BorderLayout.PAGE_END);
            jFrame.setVisible(true);
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加监听器

           //添加AC监听器
            AC.addActionListener(e->{
              lists.clear();
              jTextField.setText("");
            });
            //添加Beck监听器
            Beck.addActionListener(e->{
                String text=jTextField.getText();//得到输入文本框
                //如果文本框的内容是空或者长度是一,直接将文本框的内容设置为空
                if("".equals(text)||text.length()==1)
                {
                    jTextField.setText("");
                    return ;
                }
                //如果文本的长度大于1就要向前截取
                if(text.length()>1)
                {
                   text=text.substring(0,text.length()-1);
                   jTextField.setText(text);
                }
            });
            //添加CE监听器
            CE.addActionListener(e->{

                String text=jTextField.getText();
                if("".equals(text))
                {
                    return ;
                }
                //将加减乘除移除,防止出现错误
                if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
                {
                    lists.remove(0);
                }
                //直接将文本框清空
                jTextField.setText("");
            });
            //添加数字按键的监听器  使用匿名类 然后再用匿名类创建数字按键的监听器
            ActionListener actionListener=new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    //得到文本框内容
                    String text=jTextField.getText();
                    //除数不能为0 ,如果有,点击数字键就会消失
                    if("除数不为0".equals(text))
                    {
                        jTextField.setText(e.getActionCommand());
                        return ;
                    }
                    //如果是0,只能输入小数点
                    if("0".equals(text))
                    {
                        return ;
                    }
                    //如果文本域是空,就把当前点击的按键 添加入文本框中
                    if("".equals(text))
                    {
                        jTextField.setText(e.getActionCommand());
                    }
                    else
                    {
                        //如果当前文本框有数据,并且是 运算符 记录运算符
                        if(text.equals("+")||text.equals("-")||text.equals("*")||text.equals("/"))
                        {
                            //记录下运算符,并且将文本框设置为空
                            lists.add(text);
                            jTextField.setText("");
                            //将文本框中的数字设置为0
                            text="";
                        }
                        text+=e.getActionCommand();
                        jTextField.setText(text);
                    }
                }
            };
            //为数字设置监听器
            jButton1.addActionListener(actionListener);
            jButton2.addActionListener(actionListener);
            jButton3.addActionListener(actionListener);
            jButton4.addActionListener(actionListener);
            jButton5.addActionListener(actionListener);
            jButton6.addActionListener(actionListener);
            jButton7.addActionListener(actionListener);
            jButton8.addActionListener(actionListener);
            jButton9.addActionListener(actionListener);
            //为 0 按键设置监听器
            jButton0.addActionListener(e->{
                String text=jTextField.getText();
                //如果是 0 就不可以再为 0
                if("0".equals(text))
                {
                    return ;
                }
                //如果是运算符 记录下运算符
                if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
                {
                    lists.add(text);
                    text="";
                }
                text+=e.getActionCommand();
                jTextField.setText(text);
            });
            //为小数点设置监听器
            Point.addActionListener(e->{
                String text=jTextField.getText();
                if("".equals(text))
                {
                    return ;
                }
                //判断是否是运算符
                if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
                {
                   return ;
                }
                //数字后边不能同时出现两个小数点
                if(text.contains("."))
                {
                    return ;
                }
                text+=e.getActionCommand();
                jTextField.setText(text);
            });
            //为加减乘除按键设置监听器  使用匿名类
            ActionListener actionListener1=new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    String text=jTextField.getText();
                    if("".equals(text))
                    {
                        return ;
                    }
                    if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
                    {
                        return ;
                    }
                    //将内容添加到集合里边
                    lists.add(text);
                    //将文本框清空
                    jTextField.setText("");
                    //获取按键上边的数字
                    jTextField.setText(e.getActionCommand());
                }
            };
            //为加减乘除设置监听器
            sum.addActionListener(actionListener1);
            add.addActionListener(actionListener1);
            ChenFa.addActionListener(actionListener1);
            ChuFa.addActionListener(actionListener1);
            //为 = 添加监听器
            ActionListener actionListener2=new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    //判断集合数据
                    if(lists.isEmpty())
                    {
                        return ;
                    }
                    String text=jTextField.getText();
                    if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
                    {
                        return ;
                    }
                    //将其添加在集合里边
                    lists.add(text);
                    if(lists.size()<3)
                    {
                        return ;
                    }
                    String one=lists.get(0);//获取集合的第一个数
                    String two=lists.get(1);//获取集合的第二个数
                    String three=lists.get(2);//获取集合的第三个数
                    switch (two)
                    {
                        case "+":
                            //Double类中本来就有个方法parseDouble() ,作用是把字符串转换为Double。
                            double i=Double.parseDouble(one);
                            double j=Double.parseDouble(three);
                            jTextField.setText((i+j)+"");
                            break ;
                        case "-":
                            double x=Double.parseDouble(one);
                            double y=Double.parseDouble(three);
                            jTextField.setText((x-y)+"");
                            break;
                        case "*":
                            double m=Double.parseDouble(one);
                            double n=Double.parseDouble(three);
                            jTextField.setText((m*n)+"");
                            break;
                        case "/":
                            double k=Double.parseDouble(one);
                            double z=Double.parseDouble(three);
                            if(z==0)
                            {
                                jTextField.setText("除数不为0");
                                lists.clear();
                                return ;
                            }
                            jTextField.setText((k/z)+"");
                            break;
                    }
                    //将集合清空
                    lists.clear();
                }
            };
            //为等号添加监听器
            result.addActionListener(actionListener2);

        }
        public static void main(String[] args) {
            SwingUtilities.invokeLater(example10::createAndShowGUI);
        }

}

三、显示界面

  • (1)运行结果(4*5的运算结果)
    在这里插入图片描述
  • 13
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您实现一个简易算器模拟程序Java代码。以下是示例代码: ``` import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends JFrame implements ActionListener { private JTextField tf1, tf2, tf3; private JButton add, subtract, multiply, divide; public Calculator() { setTitle("Calculator"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(4, 2)); tf1 = new JTextField(10); tf2 = new JTextField(10); tf3 = new JTextField(10); add = new JButton("+"); subtract = new JButton("-"); multiply = new JButton("*"); divide = new JButton("/"); add.addActionListener(this); subtract.addActionListener(this); multiply.addActionListener(this); divide.addActionListener(this); add(new JLabel("Number 1: ")); add(tf1); add(new JLabel("Number 2: ")); add(tf2); add(new JLabel("Result: ")); add(tf3); add(add); add(subtract); add(multiply); add(divide); setVisible(true); } public void actionPerformed(ActionEvent e) { int num1 = Integer.parseInt(tf1.getText()); int num2 = Integer.parseInt(tf2.getText()); int result = 0; if (e.getSource() == add) { result = num1 + num2; } else if (e.getSource() == subtract) { result = num1 - num2; } else if (e.getSource() == multiply) { result = num1 * num2; } else if (e.getSource() == divide) { result = num1 / num2; } tf3.setText(result + ""); } public static void main(String[] args) { Calculator calculator = new Calculator(); } } ``` 这段代码会创建一个GUI用户界面,包含两个文本框四个按钮,分别对应加、减、乘、除运算。当用户点击这些按钮时,程序会根据用户输入的两个整数进行相应的运算,并将结果显示在第三个文本框

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值