SWING简易计算器

import java.awt.BorderLayout;
import java.awt.Dimension;
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 command.MyFrameUitl;

class CalculatorPanel extends JPanel {
JPanel panel;// 存放数字,符号的面板
JButton display;// 结果显示的地方
JButton clear;// 清空结果

String value1; // 计算中的第1个数
String value2; // 计算中的第2个数
double result; // 计算结果
String lastCommand;// 保存符号
boolean start; // 标记,判断是不是首次计算
boolean valueflag; // 标记value1中是否保存有效数字,true有,false无

public CalculatorPanel() {
panel = new JPanel();
display = new JButton("0.0");
display.setEnabled(false); // 设置按钮为禁用样式,用于显示作用
clear = new JButton("clear");
result = 0D; // 结果初始为0
lastCommand = "="; // 初始化保存"="
start = true; // true为首次计算
valueflag = true; // 用于判断是否清空显示区域的值,true不需要,false需要

// 两个事件处理对象,分别处理 数字,符号
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();

panel.setLayout(new GridLayout(4, 4));// 中间面板的布局
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);

addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);

addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);

addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);

setLayout(new BorderLayout());// 边框布局
this.add(display, BorderLayout.NORTH); // 加入到顶部
this.add(clear, BorderLayout.SOUTH); // 加入到底部
this.add(panel, BorderLayout.CENTER);// 加入到中间
// 清除功能
clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 初始化属性值
display.setText("0.0");
result = 0D;
lastCommand = "=";
start = true;
valueflag = true;
}
});
}

// 增加按钮到面板,并注册监听器
private void addButton(String label, ActionListener listener) {
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}

// 数字处理监听器对象
private class InsertAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand(); // 获取按的数字
if (start) { // 如果是首次计算
if (input.equals(".")) { // 如果一上来就输入"."
return;
}
if (isZero()) { // 如果是"0.0"
display.setText(""); // 清空
}
start = false; // 已经输入过
} else { // 不是首次计算
if (display.getText().equals("-")) { // 如果只有一个"-"
return;
}
if (input.equals(".")) { // 如果输入是"."
if (eqaulsPoint()) {
return;
}
}
}
// 判断是否需要清空显示区域的值
if (!valueflag) {
valueflag = true;
display.setText("");
}
display.setText(display.getText() + input);
}
}

// 符号处理监听器对象
private class CommandAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String inputCommand = e.getActionCommand(); // 获取按的符号
if (start) { // 首次输入的情况
if (inputCommand.equals("-")) { // 如果一上来就是"-"
display.setText("-");
}
} else {
//如果是连续输入运算符,就不去计算
if (valueflag) {
calculate(Double.parseDouble(display.getText()));
}

lastCommand = inputCommand;// 保存运算符

// 这里意味着下次再输入数字的话,就要清空显示区域的值
// 另一个作用就是判断用户是不是连接输入去运算符
valueflag = false;
}
}
}

// 计算并显示结果
public void calculate(double x) {
if (lastCommand.equals("+")) {
result += x;
} else if (lastCommand.equals("-")) {
result -= x;
} else if (lastCommand.equals("*")) {
result *= x;
} else if (lastCommand.equals("/")) {
result /= x;
} else if (lastCommand.equals("=")) {
result = x;
}
display.setText("" + result);
}

// 判断显示区域的值display中是否包含有一个".", true存在,false为不存在
private boolean eqaulsPoint() {
String value = display.getText();
int index = value.indexOf("."); // 返回.的下标,如果返回-1,则证明不存在
return !(index == -1);
}

// 判断显示区域的值display中最后字符是不是".", true是 false不是
private boolean lastIsPoint() {
String value = display.getText();
int index = value.indexOf(".");
return index == value.length() - 1;
}

// 判断显示区域的值 是不是 "0.0" true是 false不是
private boolean isZero() {
String value = display.getText();
return value.equals("0.0");
}
}

class CalculatorFrame extends JFrame {
public CalculatorFrame() {
add(new CalculatorPanel());
util.MyFrameInitUtil.init(this, new Dimension(200, 200), "简易计算器", true);
pack();

}
}

public class CalculatorTest {
public static void main(String[] args) {
new CalculatorFrame();
}
}

你可能感兴趣的:(swing)