用JAVA—GUI编程设计实现“简单的计算器”

设计内容:设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、

设计要求:设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。

设计效果:

用JAVA—GUI编程设计实现“简单的计算器”_第1张图片


 

键钮含义:

C     清零,

D     求导数,

√    求平方根,

%     求余,

<<<   退格,

(+/-)  正负号

+-*÷  四则运算

代码实现:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Calculator extends JFrame {
    private static final long serialVersionUID = -1047298397568411277L;
    private JTextField textField;
    private ActionListener myListener;    
    public Calculator() {    
        setTitle("很low的计算器"); // 设置名字为计算器
        setSize(350, 400); // 设置大下为 300x300
        setLocationRelativeTo(null); // 设置位置为居中
        setResizable(false); // 设置为大小不可变的
        setDefaultCloseOperation(EXIT_ON_CLOSE); // 可以退出        
        Container container = getContentPane(); // 新建一个容器
        container.setLayout(new BorderLayout(5, 5)); // 设置左右间距为5像素
        JPanel pnlNorth = new JPanel();  // 北面面板
        JPanel pnlCenter = new JPanel();  // 中间面板

        // 把textFeild和panel 都放到容器上
        container.add(pnlNorth, BorderLayout.NORTH); // 把pnlNorth放在北面
        container.add(pnlCenter, BorderLayout.CENTER); // 把pnlCenter放在center面        
        textField = new JTextField();  // 文本框设置
        textField.setFont(new Font("宋体", Font.PLAIN, 25));
        textField.setEditable(false);  // 不可修改
        textField.setHorizontalAlignment (JTextField.RIGHT); //设置输出右对齐
        
        //---------------
        pnlNorth.setLayout(new BorderLayout(5, 5)); // 设置上边的文本框和按钮的位置为边界布局
        //---------------
        
        JButton btnClear1 = useButton("<<<"); // new一个button按钮
        JButton btnClear2 = useButton("(+/-)");
        pnlNorth.add(textField, BorderLayout.CENTER); // 将文本框放到中间
        pnlNorth.add(btnClear1, BorderLayout.EAST); // 将按钮放到做左边(西)
        pnlNorth.add(btnClear2, BorderLayout.WEST);
        String[] titles = {
                "7", "8", "9", "C", "+", 
                "4", "5", "6", "%", "-",
                "1", "2", "3", "√", "×",
                "0", ".", "=", "D", "÷"
        };
        
        // 设置下面放按钮的位置的panel为网格布局
        // 4x5的网格 button与button之间的距离为5像素
        pnlCenter.setLayout(new GridLayout(4, 5, 5, 5));
        for (int i = 0; i < titles.length; i++) {
            JButton btnNum = useButton(titles[i]);
            // btnNum.setFont(new Font("宋体", Font.PLAIN, 16));
            // 三个参数分别表示: 字体,样式(粗体,斜体等),字号
            btnNum.setFont(new Font("微软雅黑",Font.PLAIN, 24));
            pnlCenter.add(btnNum);
        }
       
    }
    
    public JButton useButton (final String titles) {
        /*
         * String.valueof(x)  返回x的字符串表示
         * 这里的titles之所以要用final修饰 是为了不被修改
         * 然后后面使用String的valueof方法是为了将
         */
        JButton button = new JButton(String.valueOf(titles));
        if(myListener == null){
            myListener = new ActionListener(){
                public void actionPerformed(ActionEvent event){
                      String  btnInformation  = event.getActionCommand();
                    char key2 = btnInformation.charAt(0);
                    action(key2);
                }
            };
        }
        button.addActionListener(myListener);
        
        return button;
    }
    
    int len;
    String a, b, value; 
    char exit = '0'; // 初始化为=进入的时候避免多次进入case '=': 出错 ,在使用完之后置为=
    char op = 'n'; // 最听话的op 始终指向前一个操作符  这里的=是逻辑意义上的得到运算结果的意思
    boolean flag = false;
    //  flag 为false的时候进行数字长度增加的操作
    //  flag 为true的时候进行数字首次输入的操作
    private void action(char key2){
        /*
         * 在计算器的运算中整体的数字都是被转化为了double型的
         * Double.parseDouble ...
         * 
         */
        String text;
        switch(key2){
            case '1':case '2':case '3':case '4':case '5':
            case '6':case '7':case '8':case '9':case '0':
                if (flag) {
                    textField.setText("");
                    textField.setText(String.valueOf(key2));
                    flag = false;
                } else {
                    text = textField.getText() + key2;
                    textField.setText(text);
                    text = "";  // 因为text公用每次使用完了之后进行清空的操作
                                            
                }
                break;
                
            case '.':   
                if("".equals(textField.getText()))
                    break; // 第一个元素不能为.    
                
                if(!"".equals(textField.getText())){
                    text = textField.getText();
                    len = text.length();
                    int i = 0;
                    for(; i

测试:

本次实验测试不太容易用截屏的方式来呈现下来,于是我就录了个视频,由于视频无法在CSDN平台上展现,这就靠读者个人去自己测试了(在前面已经给予了符号所表示的意思)

希望此篇博客可以帮助到亲爱的读者您!!!

 

你可能感兴趣的:(Java)