首页 > 开发 > Java > 正文

java实现的计算器功能示例【基于swing组件】

2024-07-13 10:15:08
字体:
来源:转载
供稿:网友

本文实例讲述了java实现的计算器功能。分享给大家供大家参考,具体如下:

package awtDemo;import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;@SuppressWarnings("serial")public class Calculator extends JFrame implements ActionListener {    private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",            "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };    private final String[] COMMAND = { "Backspace", "CE", "C" };    private JButton keys[] = new JButton[KEYS.length];    private JButton commands[] = new JButton[COMMAND.length];    private JTextField resultText = new JTextField("0");    private boolean firstDigit = true;    private double resultNum = 0.0;    private String operator = "=";    private boolean operateValidFlag = true;    public Calculator() {        init();        this.setBackground(Color.LIGHT_GRAY);        this.setTitle("www.vevb.com - 计算器");        this.setLocation(500, 300);        this.setResizable(false);        this.pack();    }    private void init() {        resultText.setHorizontalAlignment(JTextField.RIGHT);        resultText.setEditable(false);        resultText.setBackground(Color.white);        JPanel calckeysPanel = new JPanel();        calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));        for (int i = 0; i < KEYS.length; i++) {            keys[i] = new JButton(KEYS[i]);            calckeysPanel.add(keys[i]);            keys[i].setForeground(Color.blue);        }        keys[3].setForeground(Color.red);        keys[8].setForeground(Color.red);        keys[13].setForeground(Color.red);        keys[18].setForeground(Color.red);        keys[19].setForeground(Color.red);        JPanel commandsPanel = new JPanel();        commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));        for (int i = 0; i < COMMAND.length; i++) {            commands[i] = new JButton(COMMAND[i]);            commandsPanel.add(commands[i]);            commands[i].setForeground(Color.red);        }        JPanel panel1 = new JPanel();        panel1.setLayout(new BorderLayout(3, 3));        panel1.add("North", commandsPanel);        panel1.add("West", calckeysPanel);        JPanel top = new JPanel();        top.setLayout(new BorderLayout());        top.add("Center", resultText);        getContentPane().setLayout(new BorderLayout(3, 5));        getContentPane().add("North", top);        getContentPane().add("Center", panel1);        for (int i = 0; i < KEYS.length; i++) {            keys[i].addActionListener(this);        }        for (int i = 0; i < COMMAND.length; i++) {            commands[i].addActionListener(this);        }    }    public void actionPerformed(ActionEvent e) {        String label = e.getActionCommand();        if (label.equals(COMMAND[0])) {            handleBackspace();        } else if (label.equals(COMMAND[1])) {            resultText.setText("0");        } else if (label.equals(COMMAND[2])) {            handleC();        } else if ("0123456789.".indexOf(label) >= 0) {            handleNumber(label);        } else {            handleOperator(label);        }    }    private void handleBackspace() {        String text = resultText.getText();        int i = text.length();        if (i > 0) {            text = text.substring(0, i - 1);            if (text.length() == 0) {                resultText.setText("0");                firstDigit = true;                operator = "=";            } else {                resultText.setText(text);            }        }    }    private void handleNumber(String key) {        if (firstDigit) {            resultText.setText(key);        } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {            resultText.setText(resultText.getText() + ".");        } else if (!key.equals(".")) {            resultText.setText(resultText.getText() + key);        }        firstDigit = false;    }    private void handleC() {        resultText.setText("0");        firstDigit = true;        operator = "=";    }    private void handleOperator(String key) {        if (operator.equals("/")) {            if (getNumberFromText() == 0.0) {                operateValidFlag = false;                resultText.setText("除数不能为零");            } else {                resultNum /= getNumberFromText();            }        } else if (operator.equals("1/x")) {            if (resultNum == 0.0) {                operateValidFlag = false;                resultText.setText("零没有倒数");            } else {                resultNum = 1 / resultNum;            }        } else if (operator.equals("+")) {            resultNum += getNumberFromText();        } else if (operator.equals("-")) {            resultNum -= getNumberFromText();        } else if (operator.equals("*")) {            resultNum *= getNumberFromText();        } else if (operator.equals("sqrt")) {            resultNum = Math.sqrt(resultNum);        } else if (operator.equals("%")) {            resultNum = resultNum / 100;        } else if (operator.equals("+/-")) {            resultNum = resultNum * (-1);        } else if (operator.equals("=")) {            resultNum = getNumberFromText();        }        if (operateValidFlag) {            long t1;            double t2;            t1 = (long) resultNum;            t2 = resultNum - t1;            if (t2 == 0) {                resultText.setText(String.valueOf(t1));            } else {                resultText.setText(String.valueOf(resultNum));            }        }        operator = key;        firstDigit = true;        operateValidFlag = true;    }    private double getNumberFromText() {        double result = 0;        try {            result = Double.valueOf(resultText.getText()).doubleValue();        } catch (NumberFormatException e) {        }        return result;    }    public static void main(String args[]) {        Calculator calculator1 = new Calculator();        calculator1.setVisible(true);        calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }}

运行效果:

java,计算器,swing组件

 

希望本文所述对大家java程序设计有所帮助。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表