Java实验报告-计算器(AWT图形界面)

 

一、实验目的

掌握图形用户界面的设计与实现。

二、实验内容

使用图形界面制作一个计算器并实现相应功能。

三、实验步骤

Java实验报告-计算器(AWT图形界面)_第1张图片

public class firstapp extends Applet implements ActionListener {

    private String[] LEFTKEYS = { "7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "+/-", "." };

    private String[] RIGHTKEYS = { "/", "sqrt", "ln", "*", "sin", "<-", "-", "cos", "CE", "+", "y^x", "=" };

    private Button leftKeys[] = new Button[LEFTKEYS.length];

    private Button rightKeys[] = new Button[RIGHTKEYS.length];

    private TextField resultText = new TextField("0");



    private double resultNum = 0.0;

    private String operator = "=";

    private boolean startInput = true;



    public firstapp() {

        init();

    }

   

    public void init() {

        resultText.setEditable(false);

        resultText.setBackground(Color.WHITE);

        Panel leftPanel = new Panel();// 左边按钮

        leftPanel.setLayout(new GridLayout(4, 3, 3, 3));

        for (int i = 0; i < LEFTKEYS.length; i++) {

            leftKeys[i] = new Button(LEFTKEYS[i]);

            leftPanel.add(leftKeys[i]);

            leftKeys[i].setForeground(Color.RED);

        }

        Panel rightPanel = new Panel();

        rightPanel.setLayout(new GridLayout(4, 3, 3, 3));

        for (int i = 0; i < RIGHTKEYS.length; i++) {

            rightKeys[i] = new Button(RIGHTKEYS[i]);

            rightPanel.add(rightKeys[i]);

            rightKeys[i].setForeground(Color.blue);

        }

        this.setLayout(new BorderLayout());

        this.add(resultText, BorderLayout.NORTH);

        this.add(leftPanel, BorderLayout.WEST);

        this.add(rightPanel, BorderLayout.EAST);



        for (int i = 0; i < LEFTKEYS.length; i++) {

            leftKeys[i].addActionListener(this);

        }

        for (int i = 0; i < RIGHTKEYS.length; i++) {

            rightKeys[i].addActionListener(this);

        }

    }



    public void actionPerformed(ActionEvent e) {

        // TODO 自动生成的方法存根

        String label = e.getActionCommand();

        if (label.equals(RIGHTKEYS[8])) {

            // 处理CE

            resultText.setText("0");

            startInput = true;

        } else if (label.equals(RIGHTKEYS[5])) {

            // 处理退格

            handleBackSpace();

        } else if ("0123456789.".indexOf(label) >= 0) {

            // 处理数字n

            handleNum(label);

        } else {

            // 处理运算符

            handleOperate(label); 

        }

    }



    private void handleBackSpace() {

        String text = resultText.getText();

        int i = text.length();



        text = text.substring(0, i - 1);

        if (text.length() == 0) {

            // 如果文本没有了内容,显示0

            resultText.setText("0");

        } else {

            // 显示新的文本

            resultText.setText(text);

        }

    }



    private void handleNum(String key) {

        if (startInput) {

            if (key.equals(".")) {

                resultText.setText(resultText.getText() + ".");

            } else {

                resultText.setText(key);

            }

        } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {



            resultText.setText(resultText.getText() + ".");

        } else if (!key.equals(".")) {

            resultText.setText(resultText.getText() + key);

        }

        startInput = false;

    }



    private void handleOperate(String key) {

        if (key.equals(RIGHTKEYS[1]) || key.equals(RIGHTKEYS[2]) || key.equals(RIGHTKEYS[4]) || key.equals(RIGHTKEYS[7])

                || key.equals(LEFTKEYS[10])) {

            if (key.equals(RIGHTKEYS[1])) { // 处理sqrt

                if (getNumFromText() < 0.0) {

                   resultText.setText("小于0的数不能开方");

                } else {

                   resultNum = Math.sqrt(getNumFromText());

                }

            }



            if (key.equals(RIGHTKEYS[2])) { // 处理ln

                if (getNumFromText() <= 0.0) {

                   resultText.setText("小于等于0的数不能求对数");

                } else {

                   resultNum = Math.log(getNumFromText());

                }

            }

            if (key.equals(RIGHTKEYS[4])) { // 处理sin

                resultNum = Math.sin(getNumFromText());

            }



            if (key.equals(RIGHTKEYS[7])) { // 处理cos

                resultNum = Math.cos(getNumFromText());

            }

            if (key.equals(LEFTKEYS[10])) { // 处理+/-

                resultNum = getNumFromText() * (-1);

            }

            resultText.setText(String.valueOf(resultNum));

            startInput = true;

        }



        else {

            if (operator.equals("/")) {

                // 除

                if (resultText.getText().equals("0")) {

                   resultText.setText("除数不能为零");

                } else {

                   resultNum /= getNumFromText();

                }

            } else if (operator.equals("+")) {

                // 加

                resultNum += getNumFromText();

            } else if (operator.equals("-")) {

                // 减

                resultNum -= getNumFromText();

            } else if (operator.equals("*")) {

                // 乘

                resultNum *= getNumFromText();

            } else if (operator.equals("=")) {

                // 赋值

                resultNum = getNumFromText();

            } else if (operator.equals("y^x")) {

                // pow

                resultNum = Math.pow(resultNum, getNumFromText());

            }

            resultText.setText(String.valueOf(resultNum));

            operator = key;

            startInput = true;

        }

    }



    private double getNumFromText() {

        double textDouble;

        textDouble = Double.valueOf(resultText.getText()).doubleValue();

        return textDouble;

    }



    public static void main(String args[]) {

        firstapp firstapp1 = new firstapp();

        firstapp1.setVisible(true);

    }

}

四、实验总结

本次实验使我学会了如何实现图形用户界面,知道了awt各组件的相关参数、窗口的布局等相关知识。明白了接口的定义及其实现方法,了解了JAVA的事件及处理机制,学会了事件监听者类的使用。现在,我能够写出一些简单的图形用户界面程序了。

你可能感兴趣的:(后端学习)