package myc;

public class Main {
public static void main(String[] args) {
new MyCalculate().showMe();
}

}
MyClaculate.java
package myc;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
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 MyCalculate {
private JFrame jf;
private JPanel jp1, jp2;
private JTextField jtf;
private JButton[] jbs;
private JButton c_jbs;
private String str0 = "0";
private String flag=null;
private double s1 = 0.0;
private double s2 = 0.0;

public MyCalculate() {
jf = new JFrame("我的计算器");
jp1 = new JPanel();
jtf = new JTextField(14);
jbs = new JButton[16];
c_jbs = new JButton("C");
String s = "123+456-789*0.=/";
for (int i = 0; i < jbs.length; i++) {
jbs = new JButton(s.substring(i, i + 1));
/**截取字符串的一个方法
有两种传参方式
一种是public String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
另一种是public String substring(int beginIndex, int endIndex)*/
}
init();
doit();
}

private void init() {
jp1.setLayout(new FlowLayout());//setLayout()设置用户界面上的屏幕组件的格式布局 将面板的布局设置为FlowLayout,面板上增加的组件默认是按照从左到右顺序排列
jp1.add(jtf);
jp1.add(c_jbs);
jtf.setEditable(false);//设置指定的boolean变量,以指示此设置指定的boolean变量,以指示此TextComponent是否应该为可编辑。当状态改变一个PropertyChange事件(“编辑”)被解雇了。是否应该为可编辑。当状态改变一个PropertyChange事件(“编辑”)被解雇了。
//JTextComponent是swing文本组件的基类,Java程序员最熟悉的JEditorPane、JTextArea和JTextField文本控件就是该类的子类。
jtf.setText("0");
jp2 = new JPanel();
jp2.setLayout(new GridLayout(4, 4));
for (int i = 0; i < jbs.length; i++) {
jp2.add(jbs);
}
jf.add(jp1, BorderLayout.NORTH);
jf.add(jp2, BorderLayout.CENTER);
}

public void showMe() {
jf.setVisible(true);
jf.setSize(276, 210);
// jf.pack(); //自动匹配大小
jf.setLocation(200, 200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setFontAndColor();
}

private void setFontAndColor() {
// 设置字体和颜色
Font f = new Font("楷体", Font.BOLD, 14);
jtf.setFont(f);
Color c = new Color(128, 198, 077);
c_jbs.setBackground(c);
jp1.setBackground(Color.DARK_GRAY);
for (int i = 0; i < jbs.length; i++) {
jbs.setBackground(Color.gray);
}
}

public void doit() {
c_jbs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("C")) {
str0 = "0";
s1 = 0.0;
s2 = 0.0;
flag=null;
jtf.setText(str0);
}
}
});
for (int i = 0; i < jbs.length; i++) {
jbs.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 拿到按钮上的名字
String str = e.getActionCommand();
if (str.equals("+")) {
s2=s1;
s1=0.0;
str0 = "0";
flag="+";
s1=s2+s1;
} else if (str.equals("-")) {
s2=s1;
s1=0.0;
str0 = "0";
flag="-";
s1=s2-s1;
} else if (str.equals("*")) {
s2=s1;
s1=0.0;
str0 = "0";
flag="*";
s1=s2*s1;
} else if (str.equals("/")) {
s2=s1;
s1=0.0;
str0 = "0";
flag="/";
s1=s2/s1;
} else if (str.equals("=")) {
if(flag.equals("+")){
s1=s2+s1;
}else if(flag.equals("-")){
s1=s2-s1;
}else if(flag.equals("*")){
s1=s2*s1;
}else if(flag.equals("/")){
s1=s2/s1;
}else{
}
flag=null;
str0 ="0";
} else {
str0 = str0 + str;
s1=Double.parseDouble(str0);
}
jtf.setText(s1+"");
}
});
}

}
}



//
////采用字符串数组方法
//public class MyCalculate implements ActionListener{
// private JFrame jf;
// private JPanel jp1, jp2;
// private JTextField jtf;
// private JButton[] jbs;
// private JButton c_jbs;
//// private double s2 = 0.0;
//
// public MyCalculate() {
// jf = new JFrame("我的计算器");
// jp1 = new JPanel();
// jtf = new JTextField(14);
// jbs = new JButton[16];
// c_jbs = new JButton("C");
// String s = "123+456-789*0.=/";
// for (int i = 0; i < jbs.length; i++) {
// jbs = new JButton(s.substring(i, i + 1));
// }
// init();
// doit();
// }
//
// private void init() {
// jp1.setLayout(new FlowLayout());
// jp1.add(jtf);
// jp1.add(c_jbs);
// jtf.setEditable(true);
//
// jtf.setText("0");
// jp2 = new JPanel();
// jp2.setLayout(new GridLayout(4, 4));
// for (int i = 0; i < jbs.length; i++) {
// jp2.add(jbs);
// }
// jf.add(jp1, BorderLayout.NORTH);
// jf.add(jp2, BorderLayout.CENTER);
// }
//
// public void showMe() {
// jf.setVisible(true);
// jf.setSize(276, 210);
// // jf.pack(); //自动匹配大小
// jf.setLocation(200, 200);
// jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// setFontAndColor();
// }
//
// private void setFontAndColor() {
// // 设置字体和颜色
// Font f = new Font("楷体", Font.BOLD, 14);
// jtf.setFont(f);
// Color c = new Color(128, 198, 077);
// c_jbs.setBackground(c);
// jp1.setBackground(Color.DARK_GRAY);
// for (int i = 0; i < jbs.length; i++) {
// jbs.setBackground(Color.gray);
// }
// }
//
// public void doit() {
// c_jbs.addActionListener(this);
// for(int i = 0; i < jbs.length; i++){
// jbs.addActionListener(this);
// }
// }
//// @Override
// String s1,s2,s3="";
// public void actionPerformed(ActionEvent e) {
// String s = e.getActionCommand();
// if ("0123456789".indexOf(s)!=-1) {
// jtf.setText(jtf.getText()+s);
// s1=jtf.getText();
// }else if("+-*/".indexOf(s)!=-1){
// jtf.setText("");
// s2=s;
// s3=s1;
// }else if("=".equals(s)){
// double result=0.0;
// if(s2.equals("+")){
// result=Double.parseDouble(s3)+Double.parseDouble(s1);
// }else if(s2.equals("-")){
//
// }else if(s2.equals("*")){
//
// }else if(s2.equals("/")){
//
// }
// }else if(".".equals(s)){
//
// }else{
// jtf.setText("0");
// s1="";s2="";s3="";
// }
// }
//}