代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class JFrameCalculator{
public static void main(String args[]){
JFrameCalculatorClass JFC=new JFrameCalculatorClass();
JFC.CalculatorDisplay();
}
}class JFrameCalculatorClass extends JFrame{
double result;
boolean start;
String lastStrMethod;
Container container=getContentPane();
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JTextField txtField=new JTextField("0",24);
JButton []btn=new JButton[11];
ActionListener btnNumAction=new NumberCountAction();
ActionListener CountMethod=new CountMethodClass();
//构造函数
JFrameCalculatorClass(){
result=0;
start=true;
lastStrMethod="=";

p1.add(txtField);

btn[0]=new JButton("1");
btn[1]=new JButton("2");
btn[2]=new JButton("3");
btn[3]=new JButton("4");
btn[4]=new JButton("5");
btn[5]=new JButton("6");
btn[6]=new JButton("7");
btn[7]=new JButton("8");
btn[8]=new JButton("9");
btn[9]=new JButton("0"); 
btn[10]=new JButton("."); p2.setLayout(new GridLayout(4,3,7,7));
for(int i=0;i<11;i++){
btn[i].addActionListener(btnNumAction);
p2.add(btn[i]);
}

addButton("+",CountMethod);
addButton("-",CountMethod);
addButton("*",CountMethod);
addButton("/",CountMethod);
addButton("=",CountMethod); }
//实例化数字按键
void addButton(String method,ActionListener listener){
JButton btn=new JButton(method);
btn.addActionListener(listener);
p3.add(btn);
}

//构建窗体
public void CalculatorDisplay(){
container.add(new JLabel("   "),BorderLayout.WEST);
container.add(new JLabel("   "),BorderLayout.EAST);
container.add(p1,BorderLayout.NORTH);
container.add(p2,BorderLayout.CENTER);
container.add(p3,BorderLayout.SOUTH);
setSize(300,250);
setLocation(250,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); 
}
//获得文本框内的数据
  class NumberCountAction implements ActionListener{
public void actionPerformed(ActionEvent e){
String input=e.getActionCommand();
if(start){
txtField.setText("");
start=false;
}
txtField.setText(txtField.getText()+input);
}
}
//设置文本框输入符号
class CountMethodClass implements ActionListener{
public void actionPerformed(ActionEvent e){
String strMethod=e.getActionCommand();
if(start){
if(strMethod.equals("-")){
txtField.setText(strMethod);
start=false;
}else{
lastStrMethod=strMethod;
}
}else{
Calculate(Double.parseDouble(txtField.getText()));
lastStrMethod=strMethod;
start=true;
}
}
}
//计算方法
public void Calculate(double x){
if(lastStrMethod.equals("+")){
result=result+x;
}else if(lastStrMethod.equals("-")){
result=result-x;
}else if(lastStrMethod.equals("*")){
result=result*x;
}else if(lastStrMethod.equals("/")){
result=result/x;
}else if(lastStrMethod.equals("=")){
result=x;
}
txtField.setText(""+result);
}
}最后的计算方法始终不明白.望各位解答.多谢!

解决方案 »

  1.   

    不懂的话可以debug看看,那样比较容易理解
      

  2.   

    那用我的吧的
    看看这个功能比较全点 
    我还有功能更全的详细代码如下:
    /*编程实现一个简单的计算器,它包括0-9的数字按钮,加、减、乘、除、清零、等号几个简单运算按钮和一个显示最后结果的文本区域
    */
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; public class Calculator extends JFrame { private Container container; 
    private GridBagLayout layout; 
    private GridBagConstraints constraints; 
    private JTextField displayField;//计算结果显示区 
    private String lastCommand;//保存+,-,*,/,=命令 
    private double result;//保存计算结果 
    private boolean start;//判断是否为数字的开始 public Calculator() { super("Calculator"); 
    container=getContentPane(); 
    layout=new GridBagLayout(); 
    container.setLayout(layout); 
    constraints=new GridBagConstraints(); 
    start=true; 
    result=0; 
    lastCommand = "="; 
    displayField=new JTextField(20); 
    displayField.setHorizontalAlignment(JTextField.RIGHT); 
    constraints.gridx=0; 
    constraints.gridy=0; 
    constraints.gridwidth=4; 
    constraints.gridheight=1; 
    constraints.fill=GridBagConstraints.BOTH; 
    constraints.weightx=100; 
    constraints.weighty=100; 
    layout.setConstraints(displayField,constraints); 
    container.add(displayField); 
    ActionListener insert = new InsertAction(); 
    ActionListener command = new CommandAction(); 
    addButton("Backspace",0,1,2,1,insert); 
    addButton("CE",2,1,1,1,insert); 
    addButton("C",3,1,1,1,insert); 
    addButton("7",0,2,1,1,insert); 
    addButton("8",1,2,1,1,insert); 
    addButton("9",2,2,1,1,insert); 
    addButton("/",3,2,1,1,command); 
    addButton("4",0,3,1,1,insert); 
    addButton("5",1,3,1,1,insert); 
    addButton("6",2,3,1,1,insert); 
    addButton("*",3,3,1,1,command); 
    addButton("1",0,4,1,1,insert); 
    addButton("2",1,4,1,1,insert); 
    addButton("3",2,4,1,1,insert); 
    addButton("-",3,4,1,1,command); 
    addButton("0",0,5,1,1,insert); 
    addButton("+/-",1,5,1,1,insert);//只显示"-"号,"+"没有实用价值 
    addButton(".",2,5,1,1,insert); 
    addButton("+",3,5,1,1,command); 
    addButton("=",0,6,4,1,command); 
    setSize(400,400); 
    setVisible(true); } 
    private void addButton(String label,int row,int column,int with,int height,ActionListener listener) { JButton button=new JButton(label); 
    constraints.gridx=row; 
    constraints.gridy=column; 
    constraints.gridwidth=with; 
    constraints.gridheight=height; 
    constraints.fill=GridBagConstraints.BOTH; 
    button.addActionListener(listener); 
    layout.setConstraints(button,constraints); 
    container.add(button); 

    private class InsertAction implements ActionListener { public void actionPerformed(ActionEvent event) { String input=event.getActionCommand(); 
    if (start) { 
    displayField.setText(""); 
    start=false; 
    if(input.equals("+/-")) 
    displayField.setText(displayField.getText()+"-"); 
    } if(!input.equals("+/-")) { 
    if(input.equals("Backspace")) { 
    String str=displayField.getText(); 
    if(str.length()>0) 
    displayField.setText(str.substring(0,str.length()-1)); 
    }else if(input.equals("CE")||input.equals("C")) { 
    displayField.setText("0"); 
    start=true; 
    }else 
    displayField.setText(displayField.getText()+input); 



    private class CommandAction implements ActionListener { public void actionPerformed(ActionEvent evt) { 
    String command=evt.getActionCommand(); 
    if(start) { 
    lastCommand=command; 
    }else { 
    calculate(Double.parseDouble(displayField.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; 
    displayField.setText(""+ result); 
    } public static void main(String []args) { 
    Calculator calculator=new Calculator(); 
    calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } }
      

  3.   

    首先,谢谢各位了.主要是输入第二个数字的时候.我感觉事件出发的是"=".那么应该是result=x.
    对于最后的结果不理解.