import java.awt.*;
import java.awt.event.*;public class Calculator extends Frame { public static void main(String[] args) {
new Calculator().launchFrame();
} TextField tf = new TextField(); // 定义计算器显示框用以显示数据 public void launchFrame() {
this.setTitle("严振的第一个小项目-计算器"); Label la = new Label("严振的世界很精彩", Label.RIGHT); // 定义计算器的标签 this.setLayout(new BorderLayout());      //设置BorderLayout布局。
setLocation(640, 480);
this.setSize(320, 240); Panel p1 = new Panel(new GridLayout(4, 4)); // 添加一个Panel,用于放置数字及相关按钮。 this.add(tf, BorderLayout.NORTH);
this.add(la, BorderLayout.SOUTH); Button button1 = new Button("1"); // 添加相应的按钮。
p1.add(button1);
Button button2 = new Button("2");
p1.add(button2);
Button button3 = new Button("3");
p1.add(button3);
Button button4 = new Button("4");
p1.add(button4);
Button button5 = new Button("5");
p1.add(button5);
Button button6 = new Button("6");
p1.add(button6);
Button button7 = new Button("7");
p1.add(button7);
Button button8 = new Button("8");
p1.add(button8);
Button button9 = new Button("9");
p1.add(button9);
Button button10 = new Button("0");
p1.add(button10);
Button button11 = new Button("+");
p1.add(button11);
Button button12 = new Button("-");
p1.add(button12);
Button button13 = new Button("*");
p1.add(button13);
Button button14 = new Button("/");
p1.add(button14);
Button button15 = new Button("="); // 特殊,求结果。应单独设置事件。
p1.add(button15);
Button button16 = new Button("CE"); // 清屏按钮
p1.add(button16); setVisible(true);
this.add(p1, BorderLayout.CENTER); this.addWindowListener(new WindowAdapter() { // 匿名类,系统退出
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

button1.addActionListener(new TextListener()); // 实现监听类(能否实现批量添加事件???)
button2.addActionListener(new TextListener());
button3.addActionListener(new TextListener());
button4.addActionListener(new TextListener());
button5.addActionListener(new TextListener());
button6.addActionListener(new TextListener());
button7.addActionListener(new TextListener());
button8.addActionListener(new TextListener());
button9.addActionListener(new TextListener());
button10.addActionListener(new TextListener());
button11.addActionListener(new TextListener());
button12.addActionListener(new TextListener());
button13.addActionListener(new TextListener());
button14.addActionListener(new TextListener());
// button15.addActionListener(new TextListener());
button16.addActionListener(new TextListener());
} // 用内部类实现数字按钮的事件。Important!
private class TextListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = tf.getText();
tf.setText(s + e.getActionCommand());
if (e.getActionCommand() == "CE") {
tf.setText("");
}
if (e.getActionCommand() == "+") {

float store = Float.parseFloat(s);
//tf.setText("");
if (e.getActionCommand() == "=") {
float store1 = Float.parseFloat(s);
float sum = store + store1;
System.out.println(sum);
}
} if (e.getActionCommand() == "-") {
tf.setText("");
} if (e.getActionCommand() == "*") {
tf.setText("");
} if (e.getActionCommand() == "/") {
tf.setText("");
}
}
}
}
问题:
1.能否用更简单的方式实现代码监听事件的添加。
2.计算过程设想如下:先输入一个数据,再输入运算符,再输入第二个数据。这部分代码如何实现?如果做连续计算呢?

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Calculator {
           public static void main(String[] args){
            CalculatorFrame frame=new CalculatorFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true); 
              } }class CalculatorFrame extends JFrame {
         /**
          * 
          */
         public CalculatorFrame() {
         // TODO Auto-generated constructor stub
         setTitle("Calculator");
         CalculatorPanel panel=new CalculatorPanel();
         add(panel);
         pack();    
         }
    }
            
    class CalculatorPanel extends JPanel{
           public CalculatorPanel(){
             setLayout(new BorderLayout());
             result=0;
             lastCommand="=";        
             display=new JButton("0");
             display.setEnabled(false);
             add(display, BorderLayout.NORTH); 
             ActionListener insert=new InsertAction();
             ActionListener command=new CommandAction();
            
            
             panel=new JPanel();
             panel.setLayout(new GridLayout(4,4));
                 
            
             addButton("7",insert);
             addButton("8",insert);
             addButton("9",insert);
             addButton("/",command);
            
            
             addButton("4",insert);
             addButton("5",insert);
             addButton("6",insert);
             addButton("*",command);
            
             addButton("1",insert);
             addButton("2",insert);
             addButton("3",insert);
             addButton("-",command);
            
             addButton("0",insert);
             addButton("2.",insert);
             addButton("=",command);
             addButton("+",command);
            
             add(panel, BorderLayout.CENTER);
             }
          
            
             private void addButton(String label, ActionListener listener){        
             JButton button=new JButton(label);
             button.addActionListener(listener);
             panel.add(button);
             }
                      private class InsertAction implements ActionListener{        
    public void actionPerformed(ActionEvent event){
    String input=event.getActionCommand();
    if(start){        
    display.setText("");
    start=false;
    }
    display.setText(display.getText()+input);        
    }       
    }
            
            
    private class CommandAction implements ActionListener{   
    public void actionPerformed(ActionEvent event){
    String command=event.getActionCommand();
    if(start){
       if(command.equals("-")){
    display.setText(command);
    start=false;
    }else 
    lastCommand=command;
    }else{
    calculate(Double.parseDouble(display.getText()));
    lastCommand=command;
    start=true;
    }      
    }
    }
            
            
    public void calculate(double x) {
    if (lastCommand.equals("+"))result += x;
    else if (lastCommand.equals("-"))result -= x;
    else if (lastCommand.equals("*"))result *= x;
    else if (lastCommand.equals("/"))result /= x;
    else if (lastCommand.equals("="))result = x;
    display.setText("" + result);
    }

        private double result;
    private String lastCommand;
    private boolean start;
    private JButton display;
            private JPanel panel;
          }
      

  2.   

    下载频道 搜索个 JAVA计算器   然后下载几个源代码 看看你就明白了
      

  3.   

    http://blog.csdn.net/Mailbomb/archive/2007/12/13/1933379.aspx
      

  4.   

    批量添加事件倒没有,不过你可以把button设置成一个数组,然后用一个循环添加事件。