JAVA---编写计算器
import javax.swing.*;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.Color;
public class Jisuanqi extends JFrame implements ActionListener{
private JPanel p1=new JPanel();//创建面板
private JPanel p2=new JPanel();
private JTextField t1;//文本框1用来显示输入信息
private JTextField t2;//文本框2用来显示结果信息
private JLabel label;//标签信息
StringBuffer str;//显示屏显示的字符
double x,y;//x和y都是运算数
int z; //z表示单击那个运算符,0表示+,1表示-,2表示*,3表示 /
private JButton b[]=new JButton[12];//创建一个有12个按钮的数组
private JButton b1,b2,b3,b4,b5,b6,b7,b8;//算术功能按钮
public Jisuanji(){
super("简易计算器"); //窗口名称
Container c=getContentPane();//创建内容面板对象
t1=new JTextField(30);
t1.setEditable(false);//只能显示,不能编辑
t2=new JTextField(30);
t2.setEditable(false);//只能显示,不能编辑
label=new Label("欢迎使用小计算器");
label.setForeground(Color.blue);
//创建一个空字符串缓冲区
str=new StringBuffer();//添加标签到面板
p2.add(label);//添加标签到面板
p2.add(t2);//添加文本框到面板
p2.add(t1);//添加文本框到面板
p2.setLayout(new GridLayout(4,1));//把面板布局为4行1列
for(int i=0;i<10;i++){ //分别为数组中0~9号按钮设置标签,并注册监听器
String s=""+i;
b[i]=new JButton(s);
b[i].addActionListener(this);
}
//实例化各个按钮
b[10]=new JButton("-/+");b[11]=new JButton(".");
b1=new JButton("/"); b2=new JButton("Back");
b3=new JButton("*"); b4=new JButton("C");
b5=new JButton("+"); b6=new JButton("Sqrt");
b7=new JButton("-"); b8=new JButton("=");
//设置按钮前颜色
for(int i=0;i<12;i++){
b[i].setForegound(Color.blue);
}
b1.setForeground(Color.red); b3.setForeground(Color.red);
b5.setForeground(Color.red); b7.setForeground(Color.red);
b2.setForeground(Color.blue); b4.setForeground(Color.blue);
b6.setForeground(Color.red); b8.setForeground(Color.blue);
//添加到面板
p1.add(b[7]);p1.add(b[8]);p1.add(b[9]);p1.add(b1);p1.add(b2);
p1.add(b[4]);p1.add(b[5]);p1.add(b[6]);p1.add(b3);p1.add(b4);
p1.add(b[1]);p1.add(b[2]);p1.add(b[3]);p1.add(b5);p1.add(b6);
p1.add(b[0]);p1.add(b[10]);p1.add(b[11]);p1.add(b7);p1.add(b8);
p1.setLayout(new GridLayout(4,5,5,5));
//注册监听器
b[10]addActionListener(this);b[11].addActionListener(this);
b1.addActionListener(this);b2.addActionListener(this);
b3.addActionListener(this);b4.addActionListener(this);
b5.addActionListener(this);b6.addActionListener(this);
b7.addActionListener(this);b8.addActionListener(this);
//将面板添加到内容面板
c.add(p2);
c.add(p1);
c.setLayout(new FlowLayout());//设置顺序布局
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭动作
setVisible(true);//设置为可见
setResizable(false);//禁止调整框架大小
setSize(400,300);//设置窗口大小
}
//主方法实现创建一个窗口
public static void main(String[]args){
Jisuanqi f=new Jisuanqi();
}
//按钮的事件处理
public void actionPerformed(ActionEvent e){
try{
if(e.getSource()==b4){ //选择C清零
t1.setText("0");//把文本框清零
t1.setHorizontalAlignment(JTextField.LEFT);//文本左对齐
str.setLength(0);//清空字符串缓冲区
}
else if(e.getSource()==b[10]){ //单击“+/-”,选择输入的数是正数还是负数
x=Double.parseDouble(t1.getText().trim());//trim函数的作用是去掉字符串中的空格 t1.setText(""+(-x));
t1.setHorizontalAlignment(JTextField.LEFT);
}
else if(e.getSource()==b5){ //点击加号按钮获取x和z的值,并清空y值
x=Double.parseDouble(t1.getText().trim());
str.setLength(0);
y=0d;
z=0;
}
else if(e.getSource()==b7){ //单击减号获得x和z的值,并清空y值
x=Double.parseDouble(t1.getText().trim());
str.setLength(0);
y=0d;
z=1;
}
else if(e.getSource()==b3){ //单击乘号按钮获得x和z的值,并清空有的值
x=Double.parseDouble(t1.getText().trim());
str.length(0);
y=0d;
z=2;
}
else if(e.getSource()==b1){ //单击除号按钮获得x的值和z值的
x=Double.parseDouble(t1.getText().trim());
str.setLength(0);
y=0d;
z=3;
}
else if(e.getSource()==b8{ //单击等号按钮输出计算结果
str.length(0);
seitch(z){
case 0: t1.setText(""+(x+y)); t1.setHorizontalAlignment(JTextField.LEFT);break;
case 1: t1.setText(""+(x-y)); t1.setHorizontalAlignment(JTextField.LEFT);break;
case 2: t1.setText(""+(x*y)); t1.setHorizontalAlignment(JTextField.LEFT);break;
case 3: t1.setText(""+(x/y)); t1.setHorizontalAlignment(JTextField.LEFT);break;
}
}
else if(e.getSource()==b[11]) { //单击"."按钮输入小数
if(t1.getText().trim().indexOf('.')!=-1){ //判断字符串是否已经包含了小数点
}
else{ //如果没有小数点
if(t1.getText().trim().equals("0"){ //如果初始显示为0
t1.setText(str.append(e.getActionCommand()).toString());
t1.setHorizontalAlignment(JTextField.LEFT);
}else if(t1.geText().trim().equals("")){ //如果初始显示为空则不做任何操作
}
else{
t1.setText(str.append(e.getActionCommand()).toString());
t1.setHorizontalAlignment(JTextField.LEFT);
}
}
y=0d;
}
else if(e.getSource()==b6){ //求平方根
x=Double.parseDouble(t1.getText().trim());
if(x<0){
t1.setText("数字格式异常");
t1.setHorizontalAlignment(JTextField.LEFT);
}
else{
t1.setText(""+Math.sqrt(x));
t1.setHorizontalAlignment(JTextField.LEFT);
}
str.setLength(0);
y=0d;
}
else{
if(e.getSource()==b[0]){ //如果选择是“0”这个数字键
if(t1.getText().trim().equals("0");{
}//如果显示屏显示的是0,则不做操作
else
t1.setText(str.append(e.getActionCommand()).toString());
t1.setHorizontalAlignment(JTextField.LEFT);
y=Double.parseDouble(t1.getText().trim());
}
else if(e.getSource()==b2){ //返回的是back键
if(!t1.getText().trim().equals("0")){ //如果显示屏显示的不是0
if
(str.length()!=
1
)
{
t1.setText(str.delete(str.length()-
1
,str.length()).toString());
//可能抛出字符串越界异常
t1.setHorizontalAlignment(JTextField.RIGHT);
}
else
{
t1.setText(
"0"
); t1.setHorizontalAlignment(JTextField.RIGHT);
str.setLength(
0
);
}
}
y=Double.parseDouble(t1.getText().trim());
}
else
{
t1.setText(str.append(e.getActionCommand()).toString());
t1.setHorizontalAlignment(JTextField.RIGHT);
y=Double.parseDouble(t1.getText().trim());
}
}
}
catch
(NumberFormatException e1){ t1.setText(
"数字格式异常"
);
t1.setHorizontalAlignment(JTextField.RIGHT); }
catch
(StringIndexOutOfBoundsException e1){t1.setText(
"字符串索引越界"
);
t1.setHorizontalAlignment(JTextField.RIGHT);}
}
}