package myCalculator;
import javax.swing.JFrame;
public class Calculator {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setTitle("计算器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
MyFrame.java
package myCalculator;
import javax.swing.JFrame;
public class MyFrame extends JFrame{
public MyFrame() {
add(new MyPanel());
pack();
}
}
MyPanel.java
package myCalculator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyPanel extends JPanel{
JTextField display;
JPanel panel1;
JPanel panel2;
JPanel panel3;
String nowButton;
public MyPanel() {
//整个面板的布局
BorderLayout borderLayout = new BorderLayout();
setLayout(borderLayout);
//面板1
display = new JTextField(20);
display.setEnabled(false);
panel1 = new JPanel();
panel1.add(display);
add(panel1,BorderLayout.NORTH);
//面板2
ActionListener command = new CommandAction();
panel2 = new JPanel();
panel2.setLayout(new GridLayout(4,4));
String [][]a = {{"7","8","9","+"},{"4","5","6","-"},{"1","2","3","*"},{".","0","=","/"}};
JButton buttons[][] = new JButton[4][4];
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
addButton1(a[i][j],command);
}
}
add(panel2,BorderLayout.CENTER);
//面板3
panel3 = new JPanel();
panel3.setLayout(new GridLayout(1,2));
addButton2("BackSace",command);
addButton2("AC",command);
add(panel3,BorderLayout.SOUTH);
}
//为面板2中的每个按钮注册监视器
public void addButton1(String label, ActionListener listener) {
JButton button = new JButton(label);
button.addActionListener(listener);
panel2.add(button);
}
//为面板3中的每个按钮注册监视器
public void addButton2(String label, ActionListener listener) {
JButton button = new JButton(label);
button.addActionListener(listener);
panel3.add(button);
}
class CommandAction implements ActionListener{
public void actionPerformed(ActionEvent e) {
String nowButton = e.getActionCommand();
if(nowButton != "BackSace" && nowButton != "=") {
display.setText(display.getText() + nowButton);
}
if(nowButton.equals("=")) {
display.setText(calculate(display.getText()));
}
if(nowButton.equals("BackSace")) {
StringBuffer sb = new StringBuffer(display.getText());
display.setText(sb.substring(0,sb.length()-1));
}
if(nowButton.equals("AC")) {
display.setText("");
}
}
public String calculate(String string) {
StringBuffer sb = new StringBuffer(string);
int commandCount = 0;
int j = 0;
for(j=0; j<sb.length(); j++) {
if(sb.charAt(j)<='9' && sb.charAt(j)>='0' || sb.charAt(j)=='.') {
continue;
}
else {
commandCount++;
}
}
char[] command = new char[commandCount];
String[] num = new String[commandCount+1];
for(j=0;j<num.length;j++) {
num[j] = "";
}
int k=0;
for(j=0; j<sb.length(); j++) {
if(sb.charAt(j)<='9' && sb.charAt(j)>='0' || sb.charAt(j)=='.') {
num[k] += sb.charAt(j);
continue;
}
else {
command[k] = sb.charAt(j);
k++;
}
}
double result = 0;
for(int i=0; i<commandCount; i++) {
double num1 = Double.parseDouble(num[i]);
double num2 = Double.parseDouble(num[i+1]);
char cc = command[i];
switch(cc) {
case '+':
result = num1+num2;
break;
case '-':
result = num1-num2;
break;
case '*':
result = num1*num2;
break;
case '/':
result = num1/num2;
break;
default:
break;
}
num[i+1] = String.valueOf(result);
}
return String.valueOf(result);
}
}
}
运行结果: