package proj;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
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.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class Calculators extends JFrame implements ActionListener, CaretListener {
private JTextField textResult ,textReview;
private JButton btns[]=new JButton[30];
private String str;
public Calculators(String str) {
super(str);
this.setBounds(600, 150, 220, 320);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.getContentPane().setBackground(Color.lightGray);
this.getContentPane().setLayout(new BorderLayout());
JPanel p1=new JPanel();
p1.setLayout(new BorderLayout(0, 0));
textResult=new JTextField("0",5);
textResult.setHorizontalAlignment(JTextField.RIGHT);
textResult.setFont(new Font("a",Font.BOLD,20));
textReview=new JTextField(textResult.getText());
textReview.setHorizontalAlignment(JTextField.RIGHT);
textReview.setEditable(false);
textReview.setFont(new Font("v",Font.BOLD,12));
JPanel p1_north=new JPanel();//设置布局
p1.add(p1_north,BorderLayout.NORTH);
JPanel p1_west=new JPanel();
p1.add(p1_west,BorderLayout.WEST);
JPanel p1_east=new JPanel();
p1.add(p1_east,BorderLayout.EAST);
JPanel ppp=new JPanel();
ppp.setLayout(new GridLayout(2,1,0,-2));//更加简洁
ppp.add(textReview);
ppp.add(textResult);
p1.add(ppp,BorderLayout.CENTER);
p1.add(p1_west,BorderLayout.WEST);
JPanel p1_south=new JPanel();
p1.add(p1_south,BorderLayout.SOUTH);
this.getContentPane().add(p1,BorderLayout.NORTH);
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(6, 5,10,10));
btns=get(btns);
for(int i=0;i<btns.length;i++){
p2.add(btns[i]);
btns[i].setMargin(new Insets(0, 0, 0, 0));//设置按钮的边缘空余部分为0
if(i==btns.length -1){
btns[i].setFont(new Font("b", Font.ROMAN_BASELINE ,12));
}else{
btns[i].setFont(new Font("b", Font.ROMAN_BASELINE ,15));
}
btns[i].addActionListener(this);//一键事件监听
}
this.getContentPane().add(p2,BorderLayout.CENTER);
JPanel p3=new JPanel();
this.getContentPane().add(p3,BorderLayout.WEST);
JPanel p4=new JPanel();
this.getContentPane().add(p4,BorderLayout.EAST);
JPanel p5=new JPanel();
this.getContentPane().add(p5,BorderLayout.SOUTH);
//添加文本监听器
textResult.addCaretListener(this);
textReview.addCaretListener(this);
this.setVisible(true);
}
private JButton[] get(JButton[] btns2) {
btns[0]=new JButton("MC");
btns[1]=new JButton("MR");
btns[2]=new JButton("MS");
btns[3]=new JButton("M+");
btns[4]=new JButton("M-");
btns[5]=new JButton("←");
btns[6]=new JButton("CE");
btns[7]=new JButton("C");
btns[8]=new JButton("±");
btns[9]=new JButton("√");
btns[10]=new JButton("7");
btns[11]=new JButton("8");
btns[12]=new JButton("9");
btns[13]=new JButton("/");
btns[14]=new JButton("%");
btns[15]=new JButton("4");
btns[16]=new JButton("5");
btns[17]=new JButton("6");
btns[18]=new JButton("*");
btns[19]=new JButton("1/x");
btns[20]=new JButton("1");
btns[21]=new JButton("2");
btns[22]=new JButton("3");
btns[23]=new JButton("-");
btns[24]=new JButton("x^2");
btns[25]=new JButton("0");
btns[26]=new JButton(".");
btns[27]=new JButton("=");
btns[28]=new JButton("+");
btns[29]=new JButton("OFF");
return btns;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btns[0]){
}else if(e.getSource()==btns[0]){
}else if(e.getSource()==btns[1]){
}else if(e.getSource()==btns[2]){
}else if(e.getSource()==btns[3]){
}else if(e.getSource()==btns[4]){
}else if(e.getSource()==btns[5]){
str=textResult.getText();
String s="";
if(str.length()==1){
textResult.setText("0");
}else{
for(int i=0;i<str.length()-1;i++){
s+=""+str.charAt(i);
}
System.out.println(str.length());
textResult.setText(s);
}
}else if(e.getSource()==btns[6]){
}else if(e.getSource()==btns[7]){
textResult.setText("0");
textReview.setText("");
}else if(e.getSource()==btns[8]){
math();
String str=textReview.getText();
String s="";
if(str.charAt(0)=='-'){
for(int i=1;i<str.length();i++){
s+=str.charAt(i);
}
textReview.setText(s);
}else{
s="-";
for(int i=0;i<str.length();i++){
s+=str.charAt(i);
}
textReview.setText(s);
}
}else if(e.getSource()==btns[9]){
math();
String str=textResult.getText();
if(!str.equalsIgnoreCase("")){
double s=0;
try {
s=Integer.parseInt(str)*1.0;
s=Math.sqrt(s);
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str);
s=Math.sqrt(s);
} catch (NumberFormatException e2) {
}
}
textResult.setText(""+s);
}else{
str=textReview.getText();
double s=0;
try {
s=Integer.parseInt(str);
s=Math.sqrt(s);
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str);
s=Math.sqrt(s);
} catch (NumberFormatException e2) {
}
}
textReview.setText(""+s);
}
}else if(e.getSource()==btns[10]){
number(btns[10].getText());
}else if(e.getSource()==btns[11]){
number(btns[11].getText());
}else if(e.getSource()==btns[12]){
number(btns[12].getText());
}else if(e.getSource()==btns[13]){
math();
str=textResult.getText();
String s=textReview.getText();
textReview.setText(s+str+btns[13].getText());
textResult.setText("0");
}else if(e.getSource()==btns[14]){
math();
String str=textResult.getText();
if(!str.equalsIgnoreCase("")){
double s=0;
try {
s=Integer.parseInt(str)*1.00/100;
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str)/100;
} catch (NumberFormatException e2) {
}
}
textResult.setText(""+s);
}else{
str=textReview.getText();
double s=0;
try {
s=Integer.parseInt(str)*1.00/100;
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str)/100;
} catch (NumberFormatException e2) {
}
}
textReview.setText(""+s);
}
}else if(e.getSource()==btns[15]){
number(btns[15].getText());
}else if(e.getSource()==btns[16]){
number(btns[16].getText());
}else if(e.getSource()==btns[17]){
number(btns[17].getText());
}else if(e.getSource()==btns[18]){
math();
str=textResult.getText();
String s=textReview.getText();
textReview.setText(s+str+btns[18].getText());
textResult.setText("0");
}else if(e.getSource()==btns[19]){
math();
String str=textResult.getText();
if(!str.equalsIgnoreCase("")){
double s=0;
try {
s=Integer.parseInt(str);
s=1.0/s;
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str);
s=1.0/s;
} catch (NumberFormatException e2) {
}
}
textResult.setText(""+s);
}else{
str=textReview.getText();
double s=0;
try {
s=Integer.parseInt(str);
s=1.0/s;
} catch (NumberFormatException e1) {
try {
s=Double.parseDouble(str);
s=1.0/s;
} catch (NumberFormatException e2) {
}
}
textReview.setText(""+s);
}
}else if(e.getSource()==btns[20]){
number(btns[20].getText());
}else if(e.getSource()==btns[21]){
number(btns[21].getText());
}else if(e.getSource()==btns[22]){
number(btns[22].getText());
}else if(e.getSource()==btns[23]){
math();
str=textResult.getText();
String s=textReview.getText();
textReview.setText(s+str+btns[23].getText());
textResult.setText("0");
}else if(e.getSource()==btns[24]){
math();
String str=textResult.getText();
if(!str.equalsIgnoreCase("")){
try {
long s=Integer.parseInt(str);
s=s*s;
textResult.setText(""+s);
} catch (NumberFormatException e1) {
try {
double s=Double.parseDouble(str);
s=s*s;
textResult.setText(""+s);
} catch (NumberFormatException e2) {
}
}
}else{
str=textReview.getText();
try {
long s=Integer.parseInt(str);
s=s*s;
textReview.setText(""+s);
} catch (NumberFormatException e1) {
try {
double s=Double.parseDouble(str);
s=s*s;
textReview.setText(""+s);
} catch (NumberFormatException e2) {
}
}
}
}else if(e.getSource()==btns[25]){
number(btns[25].getText());
}else if(e.getSource()==btns[26]){
str=textResult.getText();
textResult.setText(str+btns[26].getText());
}else if(e.getSource()==btns[27]){
math();
}else if(e.getSource()==btns[28]){
math();
str=textResult.getText();
String s=textReview.getText();
textReview.setText(s+str+btns[28].getText());
textResult.setText("0");
}else if(e.getSource()==btns[29]){
System.exit(0);
}
}
private void math() {
String str=textReview.getText()+textResult.getText();
System.out.println(textReview.getText());
for(int i=1;i<str.length();i++){
if((""+str.charAt(i)).equals("+")){
String[] s=str.split("\\+");
System.out.println(s[0]+" "+s[1]);
try {
int sum=Integer.parseInt(s[0])+Integer.parseInt(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e1) {
try {
double sum=Double.parseDouble(s[0])+Double.parseDouble(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e2) {
e2.printStackTrace();
}
}
}
if((""+str.charAt(i)).equals("-")){
String[] s=str.split("\\-");
if(str.charAt(0)=='-'){
s[s.length-2]="-"+s[s.length-2];
}
try {
int sum=Integer.parseInt(s[s.length-2])-Integer.parseInt(s[s.length-1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e1) {
try {
double sum=Double.parseDouble(s[0])-Double.parseDouble(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e2) {
}
}
}
if((""+str.charAt(i)).equals("*")){
String[] s=str.split("\\*");
try {
int sum=Integer.parseInt(s[0])*Integer.parseInt(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e1) {
try {
double sum=Double.parseDouble(s[0])*Double.parseDouble(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e2) {
e2.printStackTrace();
}
}
}
if((""+str.charAt(i)).equals("/")){
String[] s=str.split("\\/");
try {
if(Integer.parseInt(s[0])%Integer.parseInt(s[1])==0){
int sum=Integer.parseInt(s[0])/Integer.parseInt(s[1]);
textResult.setText("");
textReview.setText(""+sum);
}else{
double sum=1.0*Integer.parseInt(s[0])/Integer.parseInt(s[1]);
textResult.setText("");
textReview.setText(""+sum);
}
} catch (NumberFormatException e1) {
try {
double sum=Double.parseDouble(s[0])/Double.parseDouble(s[1]);
textResult.setText("");
textReview.setText(""+sum);
} catch (NumberFormatException e2) {
e2.printStackTrace();
}
}
}
}
}
private void number(String text) {
str=textResult.getText();
try {
int s=Integer.parseInt(str);
if(s==0){
textResult.setText(text);
}else{
textResult.setText(str+text);
}
} catch (NumberFormatException e1) {
try {
double s=Double.parseDouble(str);
textResult.setText(str+text);
} catch (NumberFormatException e2) {
//e2.printStackTrace();
}
}
}
public static void main(String[] args) {
new Calculators("计算器");
}
@Override
public void caretUpdate(CaretEvent e) {
// TODO Auto-generated method stub
}
}