刚刚学完图形Gui.   现在老师的课程在讲io流
目前老师布置的第一个项目.就是的计算器.
但是之前所学的代码全部存在脑子了.根本不知道如何运用.<小弟以前没有编程的基础>
界面是很轻松的做出来.但是.事件监听  +-*/要如何让他运算.  不知道如何着手.
请各位大虾稍微指点一下小弟.感激不尽.!

解决方案 »

  1.   

    界面先做出来吗
    应该有三个不同的监听器吧
    分别监听
    “+-*/”四个键
    “=”一个键
    还有十个数字键
    再做一个清0的按钮就全了贴一个监听数字键的
    class Monitor3 implements ActionListener{
    MyFrame mf = null;

    public Monitor3(MyFrame mf) {
    this.mf = mf; 
    }

    public void actionPerformed(ActionEvent e) {
    if (mf.num1.getText().equals("0")){
    //num1 是TextField
    mf.num1.setText(e.getActionCommand());
    }     //获取按键上的字符并显示
    else{
        mf.num1.setText(mf.num1.getText()+e.getActionCommand());
        
    }


    }

    }献丑了
      

  2.   

    首先要确定你准备做怎么样的计算器
    如果不显示计算公式,而且不考虑优先级,那应该比较简单我贴一个以前写的吧,你参考看看import java.awt.*; 
    import java.awt.event.*; 
    public class Calculator extends WindowAdapter implements ActionListener { 
    private double result=0,data1=0,radixPointDepth=1; 
    private boolean radixPointIndicate=false,resultIndicate=false; 
    private char prec='+'; 
    private Frame f; 
    private TextField tf; 
    private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17; 
    private Panel p; 
    private static String a="";
    static public void main(String args[]) { 
    Calculator de=new Calculator(); 
    de.go(); 

    public void go() { 
    f=new Frame("傻瓜计算器"); 
    p=new Panel(); 
    p.setLayout(new GridLayout(4,4)); 
    tf=new TextField(30); 
    b1=new Button("7"); 
    b2=new Button("8"); 
    b3=new Button("9"); 
    b4=new Button("+"); 
    b5=new Button("4"); 
    b6=new Button("5"); 
    b7=new Button("6"); 
    b8=new Button("-"); 
    b9=new Button("1"); 
    b10=new Button("2"); 
    b11=new Button("3"); 
    b12=new Button("*"); 
    b13=new Button("0"); 
    b14=new Button("."); 
    b15=new Button("="); 
    b16=new Button("/"); 
    b17=new Button("清零"); 
    f.add(tf,"North"); 
    f.add(p,"Center"); 
    f.add(b17,"South"); 
    p.add(b1); 
    p.add(b2); 
    p.add(b3); 
    p.add(b4); 
    p.add(b5); 
    p.add(b6); 
    p.add(b7); 
    p.add(b8); 
    p.add(b9); 
    p.add(b10); 
    p.add(b11); 
    p.add(b12); 
    p.add(b13); 
    p.add(b14); 
    p.add(b15); 
    p.add(b16); 
    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); 
    b10.addActionListener(this); 
    b11.addActionListener(this); 
    b12.addActionListener(this); 
    b13.addActionListener(this); 
    b14.addActionListener(this); 
    b15.addActionListener(this); 
    b16.addActionListener(this); 
    b17.addActionListener(this); 
    f.addWindowListener(this); 
    f.setSize(250,190); 
    f.setVisible(true); 

    public void actionPerformed(ActionEvent e) { 
    String s; 
    s=e.getActionCommand(); 
    switch(s.charAt(0)) { 
    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': 
    if(resultIndicate) { 
    result=0; 
    data1=0; 
    prec='+'; 

    Integer Int1=new Integer(s); 
    if(radixPointIndicate) { 
    radixPointDepth=radixPointDepth/10; 
    data1=data1+(Int1.intValue())*radixPointDepth; 
    }  else { 
    data1=data1*10+(Int1.intValue()); 

    Double displayNumber=new Double(data1); 
    tf.setText(a+displayNumber.toString()); 
    resultIndicate=false; 
    break; 
    case '+': case '-':case '*':case '/':case '=': 
    if(s.charAt(0)!='='&&resultIndicate) { //不是等于而且真
    prec=s.charAt(0); 
    resultIndicate=false; 
    } else { 
    switch(prec) { 
    case '+': 
    result=result+data1; 
    break; 
    case '-': 
    result=result-data1; 
    break; 
    case '*': 
    result=result*data1; 
    break; 
    case '/': 
    result=result/data1; 
    break; 


    radixPointIndicate=false; 
    radixPointDepth=1; 
    displayNumber=new Double(result); 
    a=new String(displayNumber.toString()+s.charAt(0));
    if(s.charAt(0)=='='){
    tf.setText(displayNumber.toString()); 
    }else{
    tf.setText(a);
    }

    if(s.charAt(0)!='=') { //不是等于
    data1=0; 
    prec=s.charAt(0); 
    } else { 
    resultIndicate=true; 

    break; 
    case '.':
    radixPointIndicate=true; 
    break; 

    if(s.equals("清零")) { 
    result=0; 
    data1=0; 
    radixPointDepth=1; 
    tf.setText(""); 
    a="";


    public void windowClosing(WindowEvent e) { 
    System.exit(0); 

    }
      

  3.   

    参考我的BLOG:
    http://blog.csdn.net/breezes2008/archive/2009/05/03/4146234.aspx
      

  4.   

    计算器不应该写成面向过程的,Java就要用面向对象来写!
      

  5.   

    package day10;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;public class Calculator implements ActionListener{
    private JFrame jf;
    private JTextField jtf;
    private JButton[] jb;
    private double number1=0,number2;
    private char operator;

    public Calculator(){
    jf=new JFrame("我的计算器");
    jf.setLayout(new BorderLayout());
    jtf=new JTextField(20);
    jtf.setFont(new Font("宋体",Font.BOLD,20));
    jtf.setBackground(Color.BLACK);
    jtf.setForeground(Color.WHITE);
    // jtf.setBackground(Color.BLACK);
    String str="123+456-789*.0=/";
    jb=new JButton[str.length()];
    for(int i=0;i<jb.length;i++){
    jb[i]=new JButton(str.charAt(i)+"");
    jb[i].setFont(new Font("宋体",Font.BOLD,20));
    jb[i].setBackground(Color.BLACK);
    jb[i].setForeground(Color.WHITE);
    jb[i].addActionListener(this);
    }
    init();

    }
    private void init(){
    JPanel jp1=new JPanel();
    JPanel jp2=new JPanel(); 
    jp2.setLayout(new GridLayout(4,4));
    jp1.add(jtf);
    for(int i=0;i<jb.length;i++){
    jp2.add(jb[i]);
    }
    jp1.setLayout(new FlowLayout());
    jf.add(jp1,BorderLayout.NORTH);
    jf.add(jp2,BorderLayout.CENTER);


    public void actionPerformed(ActionEvent e) { 
    String command=e.getActionCommand();
    if(command.equals("+")||command.equals("-")||
    command.equals("*")||command.equals("/")){
    operatorHandle(command);
    }else if(command.equals("=")){
    equalHandle(command);
    }
    else {
    numberHandle(command);

    }
    public void equalHandle(String command){
    double result=0.0;
    number2=Double.parseDouble(jtf.getText());
    // operator = command.charAt(0);
    switch(operator){
    case '+': result = number1+number2;break;
    case '-': result = number1-number2;break;
    case '*': result = number1*number2;break;
    case '/': result = number1/number2;break;
    }
    jtf.setText(result+"");
    number1=result;
    number2=0;
    operator=0;
    }
    public void operatorHandle(String command){
    operator = command.charAt(0);
    number1=Double.parseDouble(jtf.getText());
    jtf.setText("");
    }
    public void numberHandle(String command){
    jtf.setText(jtf.getText()+command);
    }
    public void showMe(){
    jf.setSize(251, 300);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
    }}
      

  6.   

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class CalculatorTest
    {
     public static void main(String[] args)
     {
        Calculator calculator=new Calculator();
        calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        calculator.setVisible(true);
     }
    }
    class Calculator extends JFrame
    {
      public Calculator()
      {
       setBounds(leftX,topY,width,high);
       CalculatorPanel onePanel=new CalculatorPanel();
       add(onePanel,BorderLayout.CENTER);   
       pack(); 
     }
       private int width=500;
       private int high=500;
       private int leftX=300;
       private int topY=200;
    }
    class CalculatorPanel extends JPanel
    {
       public CalculatorPanel()
       {
           setLayout(new BorderLayout());
           add(display,BorderLayout.NORTH) ;      
           lastCommand="=";
           start=true;
           
           /*display=new JButton("0");
           display.setEnabled(false);
           add(display,BorderLayout.NORTH);*/
           
           ActionListener insert=new ActionInsert();
           ActionListener command=new ActionCommand();
           
           panelB.setLayout(new GridLayout(4,5));
                   
           addButton("7",insert);
           addButton("8",insert);
           addButton("9",insert);
           addButton("/",command);
           addButton("sqrt",command);
           
           addButton("4",insert);
           addButton("5",insert);
           addButton("6",insert);
           addButton("*",command);
           addButton("%",command);
           
           addButton("1",insert);
           addButton("2",insert);
           addButton("3",insert);
           addButton("-",command);
           addButton("1/x",command);
           
           addButton("0",insert);
           addButton("+/-",command);
           addButton(".",insert);
           addButton("+",command);
           addButton("=",command);
           
                  
           add(panelB,BorderLayout.CENTER);
                                              
       }
       public void addButton(String name,ActionListener listener)
       {
           JButton buttonOne=new JButton(name);
            buttonOne.addActionListener(listener);
            panelB.add(buttonOne);        
       }
       class ActionInsert implements ActionListener
       {        
           public void actionPerformed(ActionEvent e)
           {
            String command=e.getActionCommand();
             if(start)
                {
                   display.setText(""); //换屏!!!!!
                   start=false;                
                }                                           
              display.setText(display.getText()+command);//显示操作的数字 ,这里的false恰好与下面的
                                                         //判断值相同,使得既可以显示,有可以计算                           
           }
       }
       class ActionCommand implements ActionListener 
       {        
           public void actionPerformed(ActionEvent e)
           {           
              String command=e.getActionCommand();                   
              getTextResult=Double.parseDouble(display.getText()); //得到所操作的数字
             if(start)
             {
               
             }
             else                            //false值与上面对应
             {
              if(command.equals("+"))
              result+=getTextResult;   //X 代表按钮得到的数字display.getText(),按完运算符后希望换屏,
                                          //怎样做到?
              else if(command.equals("-"))
               result-=getTextResult;
              else if(command.equals("*"))
               result*=getTextResult;
              else if(command.equals("/"))
              result/=getTextResult;
              else if(command.equals("="))
              result=0.000000000;
              display.setText(""+result);            
                start=true;
              }
                                                       
           }        
       }   
       private JPanel panelB=new JPanel();      
       private String lastCommand;
       private boolean start;
       private JButton display=new JButton();
       private double result=0;
       private double getTextResult=0;
    } 这是我自己实现的,但不足之处 = 号还没实现出来。仅供参考,呵呵。