我已经做出来的程序如下,就是把那个外表布局给弄了一下,可是接下来不会让计算器算数,我找了好多的资料都没有结果,也许是自己太笨了吧,如1+2=3这样一个计算都还无法实现,请大虾们给一个提示(如1+2=3怎么实现)就好了.35分全压上
import java.awt.*;
class First
{
public static void main(String args[]){
Frame f=new Frame("小小马哥的计算器");
TextField text=new TextField("在这里进行计算",20);
Panel mpanel=new Panel();

f.setLayout(new BorderLayout());    //定义Frame的布局为BorderLayout;

f.add(text,BorderLayout.NORTH);   //将text添加在Frame的上方
 
f.add(mpanel,BorderLayout.CENTER);   //将panel添加到Frame的下方

Button buttons[]=new Button[21];     //定义21个按钮
buttons[0]=new Button("1");
buttons[1]=new Button("2");
buttons[2]=new Button("3");
buttons[3]=new Button("0");
buttons[4]=new Button("c");
buttons[5]=new Button("back");
buttons[6]=new Button("=");
buttons[7]=new Button("4");
buttons[8]=new Button("5");
buttons[9]=new Button("6");
buttons[10]=new Button("sin");
buttons[11]=new Button("cos");
buttons[12]=new Button("tan");
buttons[13]=new Button("cot");
buttons[14]=new Button("7");
buttons[15]=new Button("8");
buttons[16]=new Button("9");
buttons[17]=new Button("+");
buttons[18]=new Button("-");
buttons[19]=new Button("*");
buttons[20]=new Button("/");
    mpanel.setLayout(new GridLayout(3,7,5,5));  //定义panel的布局为GridLayout
    for(int i=0;i<buttons.length;i++)
    {
    mpanel.add(buttons[i]);   //将button们添加到panel上去
    buttons[i].setBackground(Color.yellow);//设置button们的颜色
}
    mpanel.setBackground(Color.black);   //设置panel的背景颜色
f.setSize(350,200);
f.setVisible(true);
}
}

解决方案 »

  1.   

    来拿分了.呵呵有个思路,不知道试过没呢?求1+2=?时,分别按"1","+","2"和"=".然后你定义一个数i,当按到"+"的时候,对这个i进行赋值,比如此时i=1,(同理:"-"是2,"*"是3,"/"是4)然后就在"="这个按钮上进行i的判断,根据判断结果进行计算操作.当然在你按"1"和"2"的时候也弄个变量给赋值了吧.这样就可以了。..我在C#里写过..好象效果还行.
      

  2.   

    比较完整的算法:1)初始化为0;(定义一个字符串s对应于那个结果窗口)
    2)按非零的数时,如果s=="0,s=对应的数字,否则s+=对应的数字,并对结果窗口刷新:(数字监听器的功能)
      注:处理之前要先判断下是否已经按了运算符:是,把窗口数赋给第一个操作数。
    3)按运算符时,记录所按运算符op(定义一个char记录):(运算符监听器的功能)
    4)按等号时,根据op将窗口数与第一个操作数进行相应运算,用结果对结果窗口刷新,并把结果赋给第一个操作数(这是为了连算):(等号监听器的功能)
    5)三角函数那些就是直接用对应的Math函数计算了,用结果对结果窗口刷新,并将结果赋给第一个操作数。
      

  3.   

    你可以参考下: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()
       {
          setTitle("Calculator");
          CalculatorPanel panel = new CalculatorPanel();
          add(panel);
          pack();
       }
    }class CalculatorPanel extends JPanel
    {  
       public CalculatorPanel()
       {  
          setLayout(new BorderLayout());      result = 0;
          lastCommand = "=";
          start = true;
          
          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(".", 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 JButton display;
       private JPanel panel;
       private double result;
       private String lastCommand;
       private boolean start;
    }
      

  4.   

    import java.awt.*;
    import java.awt.event.*;public class calculator implements ActionListener,WindowListener {
     private Frame f;  //计算器窗口容器
     private TextField result;  //文本框。
     private float Num1, Num2, NumR;  //Num1用于保存第一个值,Num2用于保存第二个值, NumR保存结果的值。
     private char sign;  //sign用于保存运算符号。 public static void main(String args[]) {  //主函数main。
       calculator cal = new calculator();
       cal.go();
     } void go() {  //go()方法,用于启动计算器。
       f = new Frame();
       f.setLayout(new BorderLayout(5,5));
       result = new TextField("0", 20);
       result.setEditable(false);
       f.add(result, "North");
       Panel p = new Panel();
       Panel p2 =new Panel();
    p.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
    p.add(mybutton("C"));
    p.add(mybutton("="));
    p2.setLayout(new GridLayout(5,4,4,5));
    p2.add(mybutton("7"));
    p2.add(mybutton("8"));
    p2.add(mybutton("9"));
    p2.add(mybutton("*"));
    p2.add(mybutton("4"));
    p2.add(mybutton("5"));
    p2.add(mybutton("6"));
    p2.add(mybutton("/"));
    p2.add(mybutton("1"));
    p2.add(mybutton("2"));
    p2.add(mybutton("3"));
    p2.add(mybutton("+"));
    p2.add(mybutton("0"));
    p2.add(mybutton("+/-"));
    p2.add(mybutton("."));
    p2.add(mybutton("-"));   f.add(p,"Center");
       f.add(p2, "South");
       f.addWindowListener(this);  //给窗体加上一个关闭事件
       f.setSize(180,220);
       f.setResizable(false);  //自由调节窗体大小为false。
       f.setVisible(true);
     } public Button mybutton(String s) {  //动态建立一个按钮和动态加入事件。
        Button TempButton=new Button(s);
        TempButton.addActionListener(this);  //加入行动事件
        return TempButton;
      } public void actionPerformed(ActionEvent e) {
       String input = e.getActionCommand();
       String str = "0123456789.";
       String op = "+-*/";   if (str.indexOf(input) >= 0 ) {  //当单击的按钮是数字按钮时进行下面处理
    if (result.getText().equals("0"))  //如果显示值中已经是0,如果再次输入的是零,则不处理。
                result.setText(input);
          else {
             if (NumR == 0)  //判定留在文本框中的值不为运算结果值。
               result.setText(result.getText().trim() + input);
             else {
               NumR = 0;
               result.setText("" + input);
        }
    }         }else if (op.indexOf(input) >= 0) {  //当单击的按钮是运算符按钮时进行下面处理。
         Num1 = Float.parseFloat(result.getText().trim());
         result.setText("");
         sign = op.charAt(op.indexOf(input));  //得到相应的运算符
          //op.charAt(n)返回在op字符串中的第n个位置的值。 
         //op.indexOf(input)返回字符input在op中出现的位置,位置值为整型,并且值从0开始
       }
       else if (input.equals("=")) {  //当单击的按钮是是=号时,进行运算。
         Num2 = Float.parseFloat(result.getText().trim());
         switch (sign) {
           case '+': {
             NumR = Num1 + Num2;
             result.setText("" + NumR);
             break;
           }
           case '-': {
             NumR = Num1 - Num2;
             result.setText("" + NumR);
             break;
           }
           case '*': {
             NumR = Num1 * Num2;
             result.setText("" + NumR);
             break;
           }
           case '/': {
             if (Num2 != 0) {  //当Num2不等于0的时候,才进行运算。
               NumR = Num1 / Num2;
               result.setText("" + NumR);
             }
             else
               result.setText("Error");
             break;
           }
           default:;
         }
       }
       else if (input.equals("+/-"))
       {             boolean isNumber = true;
                String s = result.getText();
                for (int i = 0; i < s.length(); i++)
                  if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
                         s.charAt(i) == '-'))
                  {
                    isNumber = false;
                    break;
                  }
                if (isNumber == true)
                {
                  //判断输入的数的符号 +.
                  if (s.charAt(0) == '-')
                  {
    result.setText("");
                    for (int i = 1; i < s.length(); i++)
                    {
                      char a = s.charAt(i);
                      result.setText(result.getText() + a);
                    }
                  }
                  //
                  else
                    result.setText('-' + s);    }
    }
     if (input.equals("C")) {  //当单击的按钮是C号时,初始化计算器。
         Num1 = 0;
         Num2 = 0;
         NumR = 0;
         sign = ' ';
         result.setText("0");
        }
     }
     public void windowClosing(WindowEvent e) { System.exit(-1); }
      public void windowIconified(WindowEvent e) {}
      public void windowDeiconified(WindowEvent e) {}
      public void windowClosed(WindowEvent e) {}
      public void windowOpened(WindowEvent e) {}
      public void windowActivated(WindowEvent e) {}
      public void windowDeactivated(WindowEvent e) {}
    }
    这个也不多  小数处理有点问题
      

  5.   

    上面两层主的程序,我怎么调不出来啊
    leonmorose() ( ) 信誉:100    Blog 的:
    C:\Documents and Settings\songchengzhi\桌面>java Calculator
    Exception in thread "main" java.lang.Error: Do not use CalculatorFrame.add() use
     CalculatorFrame.getContentPane().add() instead
            at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
            at javax.swing.JFrame.addImpl(JFrame.java:491)
            at java.awt.Container.add(Container.java:307)
            at CalculatorFrame.<init>(Calculator.java:21)
            at Calculator.main(Calculator.java:9)ily11(隐╃为者) ( ) 信誉:100    Blog 的:
    C:\Documents and Settings\songchengzhi\桌面>java Calculator
    Exception in thread "main" java.lang.NoClassDefFoundError: Calculator (wrong nam
    e: calculator)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
    3)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
    为什么啊
      

  6.   

    chilongge(啸天飞龙):你是用的jdk1.5版本吗?