Chinaunix首页 | 论坛 | 博客
  • 博客访问: 494920
  • 博文数量: 96
  • 博客积分: 6046
  • 博客等级: 准将
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-07 22:40
文章分类

全部博文(96)

文章存档

2009年(12)

2008年(18)

2007年(45)

2006年(21)

我的朋友

分类: Java

2006-03-07 22:49:32

//小弟刚学java,程序中写的不妥的地方还望高手们指教,同样的菜鸟们共同学习
//因为布局管理器都还没看,所以不知道有什么好布局可用,就干脆null,setbounds了,麻烦
//不过很简单
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.math.*;
public class MyCal
{
public static void main(String args[])
{
new MyFrame();
}
}

class MyFrame extends Frame
implements ActionListener
         //这是自定义的界面窗口类,同时也监听器
{         //下面定义将用到的17个button和1个textfield
   double num1=0,num2=0,result;
int fuhao=0;
boolean ready=true;
//ready表示重新输数。有了这个标志,上次运算结果仍然显示在textfield上,
   //直接按数字键不会跟在上次结果后面,而可以不按C就直接进行下次运算。
   Button b1=new Button("1");
Button b2=new Button("2");
Button b3=new Button("3");
Button b4=new Button("4");
Button b5=new Button("5");
Button b6=new Button("6");
Button b7=new Button("7");
Button b8=new Button("8");
Button b9=new Button("9");
Button b0=new Button("0");
Button bp=new Button(".");    //p,小数点
Button be=new Button("=");    //e,=号
Button bchu=new Button("/");
Button bcheng=new Button("*");
Button bjian=new Button("-");
Button bjia=new Button("+");
Button bc=new Button("c");

JTextField tf=new JTextField();
MyFrame()
{   //构造方法,初始化,把button和textfield添加到frame上。
   //并注册事件监听
tf.setBounds(40,60,200,20);
tf.setEditable(false);
tf.setHorizontalAlignment(JTextField.RIGHT);
b1.setBounds(40,100,40,20);
b2.setBounds(100,100,40,20);
b3.setBounds(160,100,40,20);
bchu.setBounds(220,100,40,20);
b4.setBounds(40,140,40,20);
b5.setBounds(100,140,40,20);
b6.setBounds(160,140,40,20);
bcheng.setBounds(220,140,40,20);
b7.setBounds(40,180,40,20);
b8.setBounds(100,180,40,20);
b9.setBounds(160,180,40,20);
bjia.setBounds(220,180,40,20);
b0.setBounds(40,220,40,20);
bp.setBounds(100,220,40,20);
be.setBounds(160,220,40,20);
bjian.setBounds(220,220,40,20);
bc.setBounds(280,100,40,20);

this.setLayout(null);
this.setBounds(300,250,360,280);
this.setResizable(false);
this.settitle("我的计算器");
this.add(b1);
this.add(b2);
this.add(b3);
this.add(b4);
this.add(b5);
this.add(b6);
this.add(b7);
this.add(b8);
this.add(b9);
this.add(b0);
this.add(bp);
this.add(be);
this.add(bchu);
this.add(bcheng);
this.add(bjian);
this.add(bjia);
this.add(bc);

this.add(tf);
this.setVisible(true);

this.addWindowListener(new ClzMain());
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bp.addActionListener(this);
be.addActionListener(this);
bjia.addActionListener(this);
bjian.addActionListener(this);
bcheng.addActionListener(this);
bchu.addActionListener(this);
bc.addActionListener(this);

}
public void actionPerformed(ActionEvent e)
{
//因这个类是监听器,所以必须有这个方法。
if(e.getSource()==b1)
{
if(ready)
{tf.setText("1");ready=false;}
else
tf.setText(tf.getText()+"1");
}

if(e.getSource()==b2)
{
if(ready)
{tf.setText("2");ready=false;}
else
tf.setText(tf.getText()+"2");
}
if(e.getSource()==b3)
{
if(ready)
{tf.setText("3");ready=false;}
else
tf.setText(tf.getText()+"3");
}
if(e.getSource()==b4)
{
if(ready)
{tf.setText("4");ready=false;}
else
tf.setText(tf.getText()+"4");
}
if(e.getSource()==b5)
{
if(ready)
{tf.setText("5");ready=false;}
else
tf.setText(tf.getText()+"5");
}
if(e.getSource()==b6)
{
if(ready)
{tf.setText("6");ready=false;}
else
tf.setText(tf.getText()+"6");
}
if(e.getSource()==b7)
{
if(ready)
{tf.setText("7");ready=false;}
else
tf.setText(tf.getText()+"7");
}
if(e.getSource()==b8)
{
if(ready)
{tf.setText("8");ready=false;}
else
tf.setText(tf.getText()+"8");
}
if(e.getSource()==b9)
{
if(ready)
{tf.setText("9");ready=false;}
else
tf.setText(tf.getText()+"9");
}
if(e.getSource()==b0)
{
if(ready)
{tf.setText("0");ready=false;}
else
tf.setText(tf.getText()+"0");
}
if(e.getSource()==bp)
{
if(ready)
{tf.setText("0.");ready=false;}
else
tf.setText(tf.getText()+".");
}

if(e.getSource()==bc)
{
fuhao=0;num1=num2=result=0;ready=true;tf.setText("");
}


if(e.getSource()==bjia)
{
fuhao=1;ready=true;
num1=Double.valueOf(tf.getText()).doubleValue();
System.out.println("num1="+num1);
tf.setText("");
}
if(e.getSource()==bjian)
{
fuhao=2;ready=true;
num1=Double.valueOf(tf.getText()).doubleValue();
System.out.println("num1="+num1);
   tf.setText("");
}
if(e.getSource()==bcheng)
{
fuhao=3;ready=true;
num1=Double.valueOf(tf.getText()).doubleValue();
System.out.println("num1="+num1);
   tf.setText("");
}
if(e.getSource()==bchu)
{
fuhao=4;ready=true;
num1=Double.valueOf(tf.getText()).doubleValue();
System.out.println("num1="+num1);
   tf.setText("");
}

if(e.getSource()==be)
{
if(fuhao!=0)
{
num2=Double.valueOf(tf.getText()).doubleValue();
System.out.println("num2="+num2);

if(fuhao==1)
result=add(num1,num2);
if(fuhao==2)
result=sub(num1,num2);
if(fuhao==3)
result=mul(num1,num2);
if(fuhao==4)
result=div(num1,num2,10);
System.out.println("result="+result);

//解决.0的问题 如果以".0"结尾,就取子串,把.0去掉。
if(String.valueOf(result).endsWith(".0"))

tf.setText(String.valueOf(result).substring(0,String.valueOf(result).length()-2));
else tf.setText(String.valueOf(result));
ready=true;fuhao=0;
}
}
}
//浮点数四则运算必须用下面四个方法,如果直接进行运算会出错。
public static double add(double v1,double v2)
{
BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.add(b2).doubleValue();
    }

    public static double sub(double v1,double v2)
    {
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.subtract(b2).doubleValue();
    }
   
    public static double mul(double v1,double v2)
    {
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.multiply(b2).doubleValue();
    }
    public static double div(double v1,double v2,int scale)
    {      
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }


}

class ClzMain extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
System.exit(0);
}
}
阅读(3484) | 评论(0) | 转发(0) |
0

上一篇:XP的关机程序

下一篇:记事本

给主人留下些什么吧!~~