// NewMiniCalculator.javaimport java.awt.*;
import java.applet.AudioClip;public class csdn10 extends java.applet.Applet  {
    // 1 = '+', 2 = '-', 3 = '*', 4 = '/', 5 = '=', 0 = 其他
    int Operation, LastButtonType;
    //计算机的数字资料存储变量
    long OnScreen = 0, OutOfScreen = 0;
    // 计算机的label参考值
    Label lblDisplay;
    AudioClip beep;    public void init()  {
     beep=getAudioClip(getCodeBase(),"audio/beep.au");
        GridBagLayout GBL = new GridBagLayout();
        GridBagConstraints GBC = new GridBagConstraints();        //使用GridBagLayout作为计算机键盘的外观管理员
        setLayout(GBL);        //把applet的尺寸改为130*160
        resize(130,160);        //产生计算机的输出显示
        lblDisplay = new Label(String.valueOf(OnScreen), Label.RIGHT);
        //设置lblDisplay的外观限制条件
        GBC.fill = GridBagConstraints.BOTH;
        GBC.weightx = 1.0;
        GBC.weighty = 1.0;
        GBC.gridwidth = GridBagConstraints.REMAINDER;
        GBC.gridheight = 1;
        GBC.ipadx = 5;
        GBC.ipady = 5;
        GBL.setConstraints(lblDisplay, GBC);
        //把输出用的Label对象加入applet中
        add(lblDisplay);        //产生计算机键盘
        CalculatorKeyBoard CKB = new CalculatorKeyBoard();
        //设置计算机键盘的外观限制条件
        GBC.weighty = 4.0;
        GBC.gridheight = 4;
        GBC.ipadx = 1;
        GBC.ipady = 1;
        GBL.setConstraints(CKB, GBC);
        //把计算机键盘加入applet中
        add(CKB);        //重置计算机的状态
        resetCalculator();
    }    //使用自己设置的间距
    public Insets insets()  {
        return new Insets(10, 10, 10, 10);
    }    public boolean action(Event evt, Object what)   {
        //只处理Button产生的action,其他的不管
        if (evt.target instanceof Button) {
            //在Button的action中,what是该Button上的文字
            String targetLabel = (String)what;
            beep.play();            if (targetLabel.equals("C"))
                resetCalculator();
            else if (targetLabel.equals("+"))
                setOperation(1);
            else if (targetLabel.equals("-"))
                setOperation(2);
            else if (targetLabel.equals("*"))
                setOperation(3);
            else if (targetLabel.equals("/"))
                setOperation(4);
            else if (targetLabel.equals("="))
                doOperation();
            else    {
                if (LastButtonType == 0)
                    OnScreen = OnScreen * 10L 
                                + Long.valueOf(targetLabel).longValue();
                else
                    OnScreen = Long.valueOf(targetLabel).longValue();
                LastButtonType = 0;
            }
            //设置新的显示字符串
            lblDisplay.setText(String.valueOf(OnScreen));
            return true;
        }
        else
            return false;
    }    //重置计算机的状态
    void resetCalculator()  {
        OnScreen = 0;
        OutOfScreen = 0;
        Operation = 0;
        LastButtonType = 0;
    }
    
    //设置运算种类
    void setOperation(int Op)    {
        OutOfScreen = OnScreen;
        Operation = Op;
        LastButtonType = Op;
    }    //执行运算
    void doOperation()  {
        if (LastButtonType != 5)    {
            long longTemp;            switch (Operation)   {
                case 1:
                    longTemp = OutOfScreen + OnScreen;
                    break;
                case 2:
                    longTemp = OutOfScreen - OnScreen;
                    break;
                case 3:
                    longTemp = OutOfScreen * OnScreen;
                    break;
                case 4:
                    longTemp = OutOfScreen / OnScreen;
                    break;
                default:
                    longTemp = 0;
                    break;
            }
            OutOfScreen = OnScreen;
            OnScreen = longTemp;
        }
        else    {
            switch (Operation)   {
                case 1:
                    OnScreen += OutOfScreen;
                    break;
                case 2:
                    OnScreen -= OutOfScreen;
                    break;
                case 3:
                    OnScreen *= OutOfScreen;
                    break;
                case 4:
                    OnScreen /= OutOfScreen;
                    break;
                default:
                    OnScreen = 0;
                    break;
            }
        }
        LastButtonType = 5;
    }
}class CalculatorKeyBoard extends Panel  {
    //计算机按钮的加入顺序
    int AddOrder[] = {  8, 9, 10, 0, 5, 6, 7, 11,
                        2, 3, 4, 12, 1, 15, 14, 13  };
    //计算机的Button参考值数组
    Button btnKeyBoard[] = new Button[16];    CalculatorKeyBoard()    {
        int i;
        //使用GridLayout来作为计算机键盘的外观管理员
        setLayout(new GridLayout(4, 4, 5, 5));        //产生计算机的按钮
        //产生'C'(清除键),先产生按钮对象后,再设置按钮显示字符串
        btnKeyBoard[0] = new Button();
        btnKeyBoard[0].setLabel("C");
        //产生0到9的按钮
        for (i = 1;i < 11;i ++)
            btnKeyBoard[i] = new Button(String.valueOf(i-1));
        // 再产生'+', '-', '*', '/', '='
        btnKeyBoard[11] = new Button("+");
        btnKeyBoard[12] = new Button("-");
        btnKeyBoard[13] = new Button("*");
        btnKeyBoard[14] = new Button("/");
        btnKeyBoard[15] = new Button("=");        //把刚刚产生的计算机按钮加入applet中
        for (i = 0;i < 16;i ++)
            add(btnKeyBoard[AddOrder[i]]);
    }