package bean;
import java.awt.*;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.util.*;
public class Calculate extends JFrame implements ActionListener {
// 10 11 12 13 14 15 16 17 18
String bn[]={"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","CE","C","=","+/-"};
JButton btn[]=new JButton[19];
Panel p[]=new Panel[6];
TextField text;
Box box;
FlowLayout fv;
Calculate(String title)
{
super(title);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
box=Box.createVerticalBox();
fv=new FlowLayout();
fv.setVgap(20);
/*
//下面是设置计算器图标的方法:
java.net.URL imgURL = Calculate.class.getResource("images/icon.jpg"); //绝对路径:"./images/icon.jpg",相对路径:"images/icon.jpg"
ImageIcon imgIcon = new ImageIcon(imgURL);
Image img = imgIcon.getImage();
this.setIconImage(img);
*/
this.setLocationRelativeTo(null);
for(int i=0;i<bn.length;i++)
{
btn[i]=new JButton(bn[i]);
btn[i].addActionListener(this);
if(i!=15&&i!=16)
{
btn[i].setPreferredSize(new Dimension(55,35));
}
else
{
btn[i].setPreferredSize(new Dimension(85,35));
}
if(i<6)
{
p[i]=new Panel();
box.add(p[i]);
}
if(i==0)
{
text=new TextField("0",30);
p[0].add(text);
}
}
p[1].add(btn[7]);p[1].add(btn[8]);p[1].add(btn[9]);p[1].add(btn[10]);
p[2].add(btn[4]);p[2].add(btn[5]);p[2].add(btn[6]);p[2].add(btn[11]);
p[3].add(btn[1]);p[3].add(btn[2]);p[3].add(btn[3]);p[3].add(btn[12]);
p[4].add(btn[0]);p[4].add(btn[14]);p[4].add(btn[18]);p[4].add(btn[13]);
p[5].add(btn[15]);p[5].add(btn[16]);p[5].add(btn[17]);
this.add(box);
this.setBounds(520,200,280,320);
this.setResizable(false);
this.setVisible(true);
this.validate();
}
int press=0; //用于判断按钮.的点击次数
int press1=0; //用于运算符按钮的点击次数
int press2=0; //用于记录+/-按钮的点击次数
int strlen=0; //用于记录按下运算符时的字符串长度
StringBuffer str=new StringBuffer("0"); //用于记载整条字符串
StringBuffer str2=new StringBuffer("0"); //用于记载整条字符串
double sum1=0; //初始化总和
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn[10]) //按钮+
{
this.yunsf(10);
}
if(e.getSource()==btn[11]) //按钮-
{
this.yunsf(11);
}
if(e.getSource()==btn[12]) //按钮*
{
this.yunsf(12);
}
if(e.getSource()==btn[13]) //按钮/
{
this.yunsf(13);
}
if(e.getSource()==btn[14]) //按钮点.
{
if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&press!=1)
{
str.append(btn[14].getText());
str2.append(btn[14].getText());
text.setText(str.toString());
press=1;
}
}
if(e.getSource()==btn[18]) //按钮+/-
{
if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/')
{
if(press2==0)
{
str.insert(strlen, "-");
str2.insert(strlen, "@"); //////////////////////////////
text.setText(str.toString());
press2=1;
}
else
{
str.deleteCharAt(strlen);
str2.deleteCharAt(strlen);
text.setText(str.toString());
press2=0;
}
}
}
if(e.getSource()==btn[15]) //按钮CE
{
if(strlen!=0)
{
str.delete(strlen, str.length());
str2.delete(strlen, str2.length());
text.setText(str.toString());
}
else
{
str.delete(0,str.length());
str2.delete(0,str2.length());
str.append("0");
str2.append("0");
text.setText(str.toString());
press=0;
press2=0;
}
}
if(e.getSource()==btn[16]) //按钮C
{
str.delete(0, str.length());
str2.delete(0, str2.length());
str.append("0");
str2.append("0");
text.setText(str.toString());
press=0;
press1=0;
press2=0;
strlen=0;
}
if(e.getSource()==btn[17]) //按钮=
{
if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&press!=1)
{
String txt=str2.toString();
String shu[]=txt.split("\\+|\\-|\\*|\\/"); //分解出字符串中的数字字符
String fh[]=txt.split("@\\d+\\\56\\d+|@\\d+|\\d+\\\56\\d+|\\d+"); //分解出字符串中的运算符
for(int i=0;i<shu.length;i++)
{
if(shu[i].startsWith("@"))
{
shu[i]="-"+shu[i].substring(1);
}
}
calculate(shu,fh);
}
}
if(e.getSource()==btn[0])
{
this.shuzi(0);
}
if(e.getSource()==btn[1])
{
this.shuzi(1);
}
if(e.getSource()==btn[2])
{
this.shuzi(2);
}
if(e.getSource()==btn[3])
{
this.shuzi(3);
}
if(e.getSource()==btn[4])
{
this.shuzi(4);
}
if(e.getSource()==btn[5])
{
this.shuzi(5);
}
if(e.getSource()==btn[6])
{
this.shuzi(6);
}
if(e.getSource()==btn[7])
{
this.shuzi(7);
}
if(e.getSource()==btn[8])
{
this.shuzi(8);
}
if(e.getSource()==btn[9])
{
this.shuzi(9);
}
}
public void yunsf(int i) //制定运算符按钮规则
{
if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&str.charAt(str.length()-1)!='.')
{
str.append(btn[i].getText());
str2.append(btn[i].getText());
text.setText(str.toString());
press=0;
press1=1;
press2=0;
strlen=str.length();
}
}
public void shuzi(int i) //制定数字按钮规则
{
if(press1!=1&&press!=1&&str.charAt(0)=='0')
{
str.replace(0, 1,btn[i].getText());
str2.replace(0, 1,btn[i].getText());
text.setText(str.toString());
}
else
{
str.append(btn[i].getText());
str2.append(btn[i].getText());
text.setText(str.toString());
}
}
public void calculate(String shu[],String fh[]) //制定运算规则
{
for(int i=1;i<fh.length;i++)
{
if(fh[i].equals("*"))
{
double sum=0;
sum=Double.parseDouble(shu[i-1])*Double.parseDouble(shu[i]);
shu[i-1]=Double.toString(0);
shu[i]=Double.toString(sum);
fh[i]="#";
}
if(fh[i].equals("/"))
{
double sum=0;
sum=Double.parseDouble(shu[i-1])/Double.parseDouble(shu[i]);
shu[i-1]=Double.toString(0);
shu[i]=Double.toString(sum);
fh[i]="#";
}
}
for(int i=1;i<fh.length;i++)
{
if(fh[i].equals("-"))
{
double sum=0;
int n=i;
for(int j=i;j<fh.length;j++)
{
if(fh[j].equals("#"))
{
n++;
}
}
sum=Double.parseDouble(shu[i-1])-Double.parseDouble(shu[n]);
shu[i-1]=Double.toString(0);
shu[n]=Double.toString(sum);
fh[i]="+";
}
}
sum1=Double.parseDouble(shu[0]);
for(int i=1;i<shu.length;i++)
{
sum1+=Double.parseDouble(shu[i]);
}
text.setText(Double.toString(sum1));
str.delete(0, str.length());
str.append(text.getText());
strlen=0;
str2.delete(0, str2.length());
str2.append(text.getText());
press2=0;
}
public static void main(String args[])
{
Calculate cal=new Calculate("JAVA计算器:浪子raining");
}
}