一个非常非常简单的计算器

需要大致看一下的知识点

  • java.swing包里面的各个组件
  • java.awt包里面的监听器等
  • javax.script包(用来将字符串里面的运算表达式)

源代码

package com.william.calculator;

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

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.*;

public class Calculator {
    public static void main(String[] args) {
        //下面是页面布局
        String result="";
        JFrame frame=new JFrame("Calculator");
        Image icon=Toolkit.getDefaultToolkit().getImage("F:/image/calculator63.png");
        frame.setIconImage(icon);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JTextField text_result=new JTextField(result,26);
        JButton button_clear=new JButton("Clear");
        text_result.setFont(new Font("宋体",Font.BOLD,24));
        button_clear.setPreferredSize(new Dimension(105,20));
        button_clear.setBackground(Color.RED);

        JButton button0=new JButton("0");
        JButton button1=new JButton("1");
        JButton button2=new JButton("2");
        JButton button3=new JButton("3");
        JButton button4=new JButton("4");
        JButton button5=new JButton("5");
        JButton button6=new JButton("6");
        JButton button7=new JButton("7");
        JButton button8=new JButton("8");
        JButton button9=new JButton("9");

        JButton button_dot=new JButton(".");
        JButton button_add=new JButton("+");
        JButton button_subtract=new JButton("-");
        JButton button_multiply=new JButton("*");
        JButton button_divide=new JButton("/");
        JButton button_calculator=new JButton("=");
        button_calculator.setBackground(Color.GREEN);

        JPanel p=new JPanel(new GridLayout(4,4,20,20));
        p.setPreferredSize(new Dimension(500,300));
        p.add(button7);
        p.add(button8);
        p.add(button9);
        p.add(button_divide);

        p.add(button4);
        p.add(button5);
        p.add(button6);
        p.add(button_multiply);

        p.add(button1);
        p.add(button2);
        p.add(button3);
        p.add(button_subtract);

        p.add(button0);
        p.add(button_dot);
        p.add(button_calculator);
        p.add(button_add);

        p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        JPanel p2=new JPanel();
        p2.setPreferredSize(new Dimension(500,80));
        p2.setLayout(new BorderLayout());
        p2.add(text_result,BorderLayout.WEST);
        p2.add(button_clear, BorderLayout.EAST);
        p2.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        frame.setLocation(0, 200);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(p2, BorderLayout.NORTH);
        frame.getContentPane().add(p, BorderLayout.SOUTH);
        frame.pack();
        frame.setResizable(true);
        frame.setVisible(true);
        //下面是监听事件
        class inputListener implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String s=((JButton)e.getSource()).getText();
                if(s!="=") {
                    text_result.setText(text_result.getText()+s);
                }
                else
                    text_result.setText(s);
            }
        }
        class clearListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                text_result.setText("");
            }
        }
        class calculatorListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                ScriptEngine jse=new ScriptEngineManager().getEngineByName("JavaScript");
                String s=text_result.getText();
                try {
                    //System.out.println(jse.eval(s));
                    if(jse.eval(s) instanceof Integer) {
                        text_result.setText(String.valueOf(jse.eval(s)));
                    }
                    else {
                        text_result.setText(String.format("%.3f", jse.eval(s)));
                    }
                }catch(Exception t) {
                    System.out.println(t.getMessage());
                }
            }

        }
        button7.addActionListener(new inputListener());
        button8.addActionListener(new inputListener());
        button9.addActionListener(new inputListener());

        button1.addActionListener(new inputListener());
        button2.addActionListener(new inputListener());
        button3.addActionListener(new inputListener());

        button4.addActionListener(new inputListener());
        button5.addActionListener(new inputListener());
        button6.addActionListener(new inputListener());

        button0.addActionListener(new inputListener());
        button_dot.addActionListener(new inputListener());
        button_add.addActionListener(new inputListener());
        button_subtract.addActionListener(new inputListener());
        button_multiply.addActionListener(new inputListener());
        button_divide.addActionListener(new inputListener());

        button_clear.addActionListener(new clearListener());
        button_calculator.addActionListener(new calculatorListener());
    }   
}

运行效果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值