English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swing 컴포넌트를 기반으로 한 Java 계산기 기능 예제

本文实例讲述了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("ko.oldtoolbag.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 {
                = getNumberFromText(); /}
            }
        }1/x")) {
            if (resultNum == 0.0) {
                operateValidFlag = false;
                resultText.setText("零没有倒数");
            } else {
                resultNum = 1 / resultNum
            }
        }+")) {
            = getNumberFromText(); +}
        }-")) {
            = getNumberFromText(); -}
        }*")) {
            = getNumberFromText(); *}
        resultNum = Math.sqrt(resultNum);
            } else if (operator.equals("%")) {
        0;
            resultNum = resultNum / 10} 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);
    }
}

실행 결과:

PS: 여러분에게 몇 가지 계산 도구를 추천해 드리겠습니다. 더 많은 참고를 위해 참고해 주세요:

온라인 단원 함수(이차식) 해결 계산 도구:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

과학 계산기 온라인 사용_고급 계산기 온라인 계산:
http://tools.jb51.net/jisuanqi/jsqkexue

온라인 계산기_기본 계산기:
http://tools.jb51.net/jisuanqi/jsq

Java 알고리즘에 대한 더 많은 내용에 관심이 있는 독자는 다음 사이트의 특집을 확인할 수 있습니다:《Java 데이터 구조와 알고리즘 교본》、《Java DOM 노드 조작 기술 요약》、《Java 파일과 디렉토리 조작 기술 요약》 및 《Java 캐시 조작 기술 요약》

이 문서에서 설명한 내용이 여러분의 Java 프로그램 설계에 도움이 되길 바랍니다.

고지: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 해당합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 자체적으로 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 있는 내용을 발견하면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보내실 때, #을 @으로 바꾸세요)를 통해 신고해 주시고, 관련 증거를 제공해 주시면, 사실이 확인되면,本站이 즉시 위반 내용을 삭제할 것입니다。

추천 합니다