packagecom.company;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public classCaculatorDemo {public static voidmain(String[] args) {
JS win=newJS();
}
}class JS extends JFrame implementsActionListener{private StringBuilder sBuilder = new StringBuilder(); //利用StringBuilder类来显示,以及区分两个操作数
JTextArea text=newJTextArea();doublea,b;
Double sum;inti;publicJS()
{
setBounds(100,100,400,400);
setTitle("Calculator");this.setLayout(new BorderLayout());//添加文本框
JPanel p1 = newJPanel();
JPanel p2= newJPanel();
text.setPreferredSize(new Dimension (370,60));//设置组件大小
p2.setLayout(newFlowLayout());
p1.add(text);this.add(p1,BorderLayout.NORTH);
p2.setLayout(new GridLayout(5,4)); //添加按钮
JButton button[]=new JButton[16];
button[0]=new JButton("7");
button[1]=new JButton("8");
button[2]=new JButton("9");
button[3]=new JButton("+"); //加号
button[4]=new JButton("4");
button[5]=new JButton("5");
button[6]=new JButton("6");
button[7]=new JButton("—"); //减号
button[8]=new JButton("1");
button[9]=new JButton("2");
button[10]=new JButton("3");
button[11]=new JButton("x"); //乘号
button[12]=new JButton("0");
button[13]=new JButton("."); //小数点
button[14]=new JButton("="); //等于
button[15]=new JButton("÷"); //除法
for(int i=0;i
p2.add(button[i]);//button[15].setBackground(Color.ORANGE);//设置按钮的背景颜色为橙色
p2.add(button[15]);
add(p2,BorderLayout.CENTER);for(int i=0;i
button[i].addActionListener(this);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击X号可以关闭程序
}public void actionPerformed(ActionEvent e) //事件处理
{//TODO Auto-generated method stub
String lab = e.getActionCommand(); //得到当前的按钮字符,后面进行匹配
if(lab.equals("0")) //处理按钮 0~9
{
sBuilder.append("0"); //利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); //显示之前所有输入的数据
}else if(lab.equals("1"))
{
sBuilder.append("1"); //利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); //显示之前所有输入的数据
}else if(lab.equals("2"))
{
sBuilder.append("2"); //利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); //显示之前所有输入的数据
}else if(lab.equals("3"))
{
sBuilder.append("3"); //利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); //显示之前所有输入的数据
}else if(lab.equals("4"))
{
sBuilder.append("4");
text.setText(sBuilder.toString());
}else if(lab.equals("5"))
{
sBuilder.append("5");
text.setText(sBuilder.toString());
}else if(lab.equals("6"))
{
sBuilder.append("6");
text.setText(sBuilder.toString());
}else if(lab.equals("7"))
{
sBuilder.append("7");
text.setText(sBuilder.toString());
}else if(lab.equals("8"))
{
sBuilder.append("8");
text.setText(sBuilder.toString());
}else if(lab.equals("9"))
{
sBuilder.append("9");
text.setText(sBuilder.toString());
}else if(lab.equals(".")) //处理按钮 "." 事件
{
sBuilder.append("."); //利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); //显示之前输入的数据
}else if(lab.equals("+")) //处理+"按钮乘法
{
a= Double.parseDouble(sBuilder.toString()); //将 运算符 之前的数据 作为第一个操作数 a
i=0;
sBuilder= new StringBuilder(); //将数组清空来存储第二个操作数 b
text.setText("+");
}else if(lab.equals("—")) //处理"—"按钮乘法
{
a= Double.parseDouble(sBuilder.toString()); //将前面的输入的数 作为第一个操作数a
i=1; //标记运算类型 即"÷"之前的数据即将作为因数
sBuilder = new StringBuilder(); //将数组清空来存储第二个操作数 b
text.setText("—");
}else if(lab.equals("x")) //处理"x"按钮乘法
{
a= Double.parseDouble(sBuilder.toString()); //将前面的输入的数 作为第一个操作数a
i=2; //标记运算类型 即"÷"之前的数据即将作为因数
sBuilder = new StringBuilder(); //将数组清空来存储第二个操作数 b
text.setText("x");
}else if(lab.equals("÷")) //处理"÷"按钮事件
{
i=3; //标记运算类型 即"÷"之前的数据即将作为被除数
a = Double.parseDouble(sBuilder.toString()); //将除法的输入的数 作为第一个操作数a
sBuilder = new StringBuilder(); //将数组清空来存储第二个操作数 b
text.setText("÷");
}else if(lab.equals("="))
{
b= Double.parseDouble(sBuilder.toString()); //一遇到"=",我们就能得到第二个操作数b
if (i == 0) //加法 a+b
{
sum=a+b;
text.setText(sum.toString());//输出第二个操作数已经输入的数据
sBuilder = new StringBuilder(); //清空数据,为后面的操作数留空间
sBuilder.append(sum);
}else if (i == 1) //减法 a-b
{
sum= a -b;
text.setText(sum.toString());
sBuilder= new StringBuilder(); //清空数据,为后面的操作数留空间
sBuilder.append(sum);
}else if (i == 2) //乘法 a*b
{
sum= a *b;
text.setText(sum.toString());
sBuilder= newStringBuilder();
sBuilder.append(sum);
}else if (i == 3) //除法 a÷b
{
sum= a /b;
text.setText(sum.toString());
sBuilder= newStringBuilder();
sBuilder.append(sum);
}elsetext.setText(sBuilder.toString());
}
}
}