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

本文实例讲述了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.jb51.net - 计算器");

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实现的计算器功能示例【基于swing组件】_第1张图片

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

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

你可能感兴趣的:(java,计算器,swing组件)