Java入门级小案例:计算机

一、实例目的

本实例通过创建计算器,使读者熟悉界面的布局和事件处理,同时练习编写程序逻辑。目标是实现一个能进行数据四则运算的简单计算器。

二、界面设计

在这里插入图片描述

三、主要算法
  1. 判断数据的输入和完成情况。
  2. 判断符号位的输入。
  3. 判断等号,输出计算结果。
四、代码实现
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Calc extends JFrame implements ActionListener {
    int i;
    // 设置数值的标志位
    boolean isFirstDigit = true; // 第一个数值
    double number = 0.0;
    // 将计算器上的数字和符号加入到数组中
    private final String[] str = {"7", "8", "9", "/", "4", "5",
            "6", "*", "1", "2", "3", "-", ".", "0", "=", "+"};
    // 创建Button数组
    JButton[] buttons = new JButton[str.length];
    // For cancel or reset.
    JButton reset = new JButton("CE");
    // 结果显示的文本框
    JTextField result = new JTextField("0");

    public Calc() {
        super("简易计算器");
        // 界面上添加第一个面板,并设置为网格布局
        JPanel panel1 = new JPanel(new GridLayout(4, 4));
        for (int i = 0; i < str.length; i++) {
            buttons[i] = new JButton(str[i]);
            buttons[i].setFont(new Font("Serif", Font.BOLD, 18));
            panel1.add(buttons[i]);//按钮加入到面板1中
        }
        reset.setFont(new Font("Serif", Font.BOLD, 18));
        result.setFont(new Font("Serif", Font.BOLD, 24));
        // 界面上添加第2个面板
        JPanel panel2 = new JPanel(new BorderLayout());
        panel2.add("Center", result);
        panel2.add("East", reset);
        // 两个面板在JFrame上的布局
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add("North", panel2);
        this.getContentPane().add("Center", panel1);
        // 为所有按钮添加事件监听器
        for (int i = 0; i < str.length; i++) {
            buttons[i].addActionListener(this);
        }
        // 为“重置”按钮添加事件监听器
        reset.addActionListener(this);
        // 为“显示”按钮添加事件监听器
        result.addActionListener(this);
        // 窗口增加关闭按钮
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置窗口大小
        this.setBounds(400, 400, 400, 400);
        this.setResizable(false);
        // 使窗口居中
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        Object OB = e.getSource();
        String command = e.getActionCommand();// 获得事件源上的文字
        if (OB == reset) {
            ChuliReset();// 处理reset事件的方法
        } else if ("0123456789.".indexOf(command) > 0) {
            ChuliNumber(command);// 处理数字按钮事件的方法
        } else {
            ChuliOperator(command);// 处理符号事件的方法
        }
    }

    public void ChuliNumber(String value) {
        if (isFirstDigit) {
            result.setText(value);
        } else if ((value.equals(".")) && (result.getText().indexOf(".") < 0)) {
            result.setText(result.getText() + ".");
        } else if (!value.equals(".")) {
            result.setText(result.getText() + value);
        }
        isFirstDigit = false;
    }

    // 重置计算器
    public void ChuliReset() {
        result.setText("0");
        number = 0.0;
        isFirstDigit = true;
    }

    String operator = "";

    // 处理运算符
    public void ChuliOperator(String value) {
        if (value.equals("+")) {
            String text = result.getText().trim();
            if (!text.isEmpty()) {
                number = Double.valueOf(result.getText());
                operator = "+";
                isFirstDigit = false;
                result.setText("");
            }else {
                try {
                    // 提示用户输入有效数字
                    JOptionPane.showMessageDialog(null, "请输入有效数字");
                }finally {
                    result.setText("0");
                }
            }
        } else if (value.equals("-")) {
            String text = result.getText().trim();
            if (!text.isEmpty()) {
                number = Double.valueOf(result.getText());
                operator = "-";
                isFirstDigit = false;
                result.setText("");
            }else {
                try {
                    // 提示用户输入有效数字
                    JOptionPane.showMessageDialog(null, "请输入有效数字");
                }finally {
                    result.setText("0");
                }
            }
        } else if (value.equals("*")) {
            String text = result.getText().trim();
            if (!text.isEmpty()) {
                number = Double.valueOf(result.getText());
                operator = "*";
                isFirstDigit = false;
                result.setText("");
            }else {
                try {
                    // 提示用户输入有效数字
                    JOptionPane.showMessageDialog(null, "请输入有效数字");
                }finally {
                    result.setText("0");
                }
            }
        } else if (value.equals("/")) {
            String text = result.getText().trim();
            if (!text.isEmpty()) {
                number = Double.valueOf(result.getText());
                operator = "/";
                isFirstDigit = false;
                result.setText("");
            }else {
                try {
                    // 提示用户输入有效数字
                    JOptionPane.showMessageDialog(null, "请输入有效数字");
                }finally {
                    result.setText("0");
                }
            }
        } else if (value.equals("=")) {
            String text = result.getText().trim();
            if (!text.isEmpty()){
                double secondNumber = Double.valueOf(text);
                if (operator.equals("+")) {
                    number += Double.valueOf(result.getText());
                }
                if (operator.equals("-")) {
                    number -= Double.valueOf(result.getText());
                }
                if (operator.equals("*")) {
                    number *= Double.valueOf(result.getText());
                }
                if (operator.equals("/")) {
                    number /= Double.valueOf(result.getText());
                }
                result.setText(String.valueOf(number));
            }else {
                try {
                    // 提示用户输入有效数字
                    JOptionPane.showMessageDialog(null, "请输入有效数字");
                }finally {
                    result.setText("0");
                }
            }
            isFirstDigit = true;
        }
    }

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

result.setText("0");
            }
        }
        isFirstDigit = true;
    }
}

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

}


此Java程序通过Swing库实现了一个简单的图形化计算器,具备基本的四则运算功能,通过对按钮点击事件的处理来实现相应的计算逻辑。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值