JAVA的课程设计,图形界面,拥有WINDOWNS自带计算器的基本功能
- 效果图
- 代码
没有异常处理,计算算法还可以优化
package 计算器;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
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;
public class Calculator {
private JFrame win;// 窗口
private JPanel JT, JB;// 文本区,按钮区
private JTextField JTF;// 文本框
private JButton[] JBF;// 按钮组
private String str0 = "";
private String flag = "";
private double s1 = 0.0;
private double s2 = 0.0;
private double result = 0.0;
private boolean first = true;
public Calculator() {
win = new JFrame("计算器");
JT = new JPanel();
JB = new JPanel();
JTF = new JTextField(20);
JBF = new JButton[24];
String[] jb = new String[] { "%", "CE", "C", "←", "²√x", "x²", "1/x", "÷", "7", "8", "9", "x", "4", "5", "6",
"-", "1", "2", "3", "+", "+/-", "0", ".", "=" };
for (int i = 0; i < JBF.length; i++) {
JBF[i] = new JButton(jb[i]);
JBF[i].setBackground(Color.white);
}
composition();
police();
}
//将组件嵌入
private void composition() {
// 文本区设置
JT.setLayout(new FlowLayout());
JT.add(JTF);
JTF.setEditable(false);
JTF.setText("0");
JTF.setHorizontalAlignment(JTextField.RIGHT);
// 按钮区设置
JB.setLayout(new GridLayout(6, 4));
for (int i = 0; i < JBF.length; i++) {
JB.add(JBF[i]);
}
// 窗口设置
win.add(JT, BorderLayout.NORTH);
win.add(JB, BorderLayout.CENTER);
win.setVisible(true);
win.pack();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//给按钮添加监视器
private void police() {
// %
JBF[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JTF.setText(String.format("%.5f%%", Double.parseDouble(JTF.getText()) * 100));
}
});
// CE
JBF[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s1 = 0;
str0 = "";
JTF.setText(str0);
}
});
// C
JBF[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
result = 0;
s1 = 0;
s2 = 0;
str0 = "";
JTF.setText(str0);
}
});
// ←
JBF[3].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str0 = JTF.getText().substring(0, JTF.getText().length() - 1);
JTF.setText(str0);
s1 = Double.parseDouble(str0);
}
});
// ²√x"
JBF[4].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s1 = Math.sqrt(s1);
JTF.setText(String.valueOf(s1));
}
});
// x²
JBF[5].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s1 = Math.pow(s1, 2);
JTF.setText(String.valueOf(s1));
}
});
// 1/x
JBF[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s1 = 1 / s1;
JTF.setText(String.valueOf(s1));
}
});
// 1~9 +-*/
for (int i = 7; i < 20; i++) {
JBF[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("+")) {
s2 = s1;
s1 = 0.0;
calculate();
str0 = "";
flag = "+";
JTF.setText(String.valueOf(result));
} else if (str.equals("-")) {
s2 = s1;
s1 = 0.0;
calculate();
str0 = "";
flag = "-";
JTF.setText(String.valueOf(result));
} else if (str.equals("x")) {
s2 = s1;
s1 = 0.0;
calculate();
str0 = "";
flag = "x";
JTF.setText(String.valueOf(result));
} else if (str.equals("÷")) {
s2 = s1;
s1 = 0.0;
calculate();
str0 = "";
flag = "/";
JTF.setText(String.valueOf(result));
} else {
if (first) {
str0 = str0 + str;
s1 = Double.parseDouble(str0);
JTF.setText(str0);
} else {
result = 0;
str0 = str0 + str;
s1 = Double.parseDouble(str0);
JTF.setText(str0);
first = true;
}
}
}
});
}
// +/-
JBF[20].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (str0.charAt(0) != '-') {
str0 = "-" + str0;
} else {
str0 = str0.substring(1, str0.length());
}
s1 = Double.parseDouble(str0);
JTF.setText(str0);
}
});
// .
JBF[22].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str0 = str0 + ".";
JTF.setText(str0);
}
});
// 0
JBF[21].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
str0 = str0 + str;
s1 = Double.parseDouble(str0);
JTF.setText(str0);
}
});
// =
JBF[23].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s2 = s1;
s1 = 0;
calculate();
s1 = result;
flag = "";
str0 = "";
JTF.setText(String.valueOf(result));
first = false;
}
});
}
//核心算法
private void calculate() {
switch (flag) {
case "":
if (first)
result = result + s2;
else
first = true;
break;
case "+":
result = result + s2;
break;
case "-":
result = result - s2;
break;
case "x":
result = result * s2;
break;
case "/":
result = result / s2;
break;
default:
break;
}
}
public static void main(String[] args) {
new Calculator();
}
}