import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Arrays;
import java.lang.StringBuilder;
/**
* @version 1.0
* @author Sam
*
*
*/
/*
三个问题:
1. 累加等运算功能还没做
2. 结果会自动保留一位小数,如 2 * 3 = 6.0
3. 2.3 * 3.2 = 7.359999999 这种会出现很多位,
应该是string和double类型转换导致的
*/
class CalculatorDemo {
private Frame mainFrame; //顶层容器
private Panel numPanel; //中间的按钮容器
private JTextField tf; //上方的文字域
private Panel funcPanel; //功能按键
private double num1; //第一个数字
private double num2; //第二个数字
private int operator; //运算符
private String result = ""; //显示结果
CalculatorDemo () {
initi();
}
private void initi() {
mainFrame = new Frame("高仿计算器");
mainFrame.setBounds(300,200,300,200);
numPanel = new Panel(new GridLayout(4,4,5,5)); //数字和运算符区域
funcPanel = new Panel(new GridLayout(4,4,5,20)); //功能按键区域
tf = new JTextField(); //文本域
tf.setEditable(false); //文本域不可输入
tf.setBackground(Color.WHITE); //背景色变白
tf.setHorizontalAlignment(JTextField.RIGHT); //文字从右侧输入
addButton(); // 添加按钮和事件
// 设定各个组件位置
mainFrame.setLayout(new BorderLayout());
mainFrame.add(tf, BorderLayout.NORTH);
mainFrame.add(numPanel, BorderLayout.CENTER);
mainFrame.add(funcPanel,BorderLayout.EAST);
addEvent(); //注册窗体事件
mainFrame.setResizable(false);
mainFrame.setVisible(true);
}
private void addEvent() {
mainFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0); //点击 X 退出
}
});
}
//循环添加button,排版好
private void addButton() {
Button del = new Button("退格");
Button renew = new Button("复位");
funcPanel.add(del);
funcPanel.add(renew);
renew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = "";
num1 = 0;
num2 = 0;
tf.setText(result);
}
});
del.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
StringBuilder sb = new StringBuilder(result);
// int i = result.length();
// char[] chr = new char[i-1];
// chr = result.toCharArray();
// chr = chr.dele
// result = Arrays.toString(chr);
int i = sb.length();
if (i - 1 >= 0 ) {
sb.deleteCharAt(i -1);
result = sb.toString();
tf.setText(result);
} else {
result = "";
tf.setText(result);
}
}
});
String[] str = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
Button[] btn = new Button[str.length];
for (int i = 0; i < str.length; i++ ) {
btn[i] = new Button(str[i]);
numPanel.add(btn[i]);
}
btn[0].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "7";
tf.setText(result);
}
});
btn[1].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "8";
tf.setText(result);
}
});
btn[2].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "9";
tf.setText(result);
}
});
btn[4].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "4";
tf.setText(result);
}
});
btn[5].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "5";
tf.setText(result);
}
});
btn[6].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "6";
tf.setText(result);
}
});
btn[8].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "1";
tf.setText(result);
}
});
btn[9].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "2";
tf.setText(result);
}
});
btn[10].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "3";
tf.setText(result);
}
});
btn[12].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + "0";
tf.setText(result);
}
});
// 下标3,7,11,15为运算符,按下运算符的时候,记录下第一个数字
btn[3].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (result != "") {
num1 = Double.parseDouble(result);
}
result = "";
operator = 1;
tf.setText("+");
}
});
btn[7].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (result != "") {
num1 = Double.parseDouble(result);
}
result = "";
operator = 2;
tf.setText("-");
}
});
btn[11].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (result != "") {
num1 = Double.parseDouble(result);
}
result = "";
operator = 3;
tf.setText("*");
}
});
btn[15].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (result != "") {
num1 = Double.parseDouble(result);
}
result = "";
operator = 4;
tf.setText("/");
}
});
// 按下等号之前,记录第二个数字
btn[14].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (result != "") {
num2 = Double.parseDouble(result);
}
double d = calcul(num1,num2);
result = String.valueOf(d);
tf.setText(result);
result = "";
}
});
btn[13].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
result = result + ".";
tf.setText(result);
}
});
}
// 计算方法单独封装,便于以后添加其他方法
private double calcul(double num1, double num2) {
double d = 0;
switch (operator) {
case 1:
d = num1 + num2;
break;
case 2:
d = num1 - num2;
break;
case 3:
d = num1 * num2;
break;
case 4:
d = num1 / num2;
break;
}
return d;
}
public static void main(String[] args) {
new CalculatorDemo();
}
}
计算器DEMO
最新推荐文章于 2023-10-30 21:25:27 发布