import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



public class tyty{

    public static void main(String[] args) {

        new PP();

    }

}



class PP extends JFrame implements ActionListener {

    private StringBuilder sBuilder = new StringBuilder(); // 利用StringBuilder类来显示,以及区分两个操作数

    JTextArea text = new JTextArea();

    double a, b;

    Double sum;

    int i;




    public PP() {

        JMenuBar menubar = new JMenuBar();// 创建菜单条

        JMenu menu1 = new JMenu("查看(V)");// 创建和设置菜单名

        JMenu menu2 = new JMenu("编辑(E)");// 创建和设置菜单名

        JMenu menu3 = new JMenu("帮助(H)");// 创建和设置菜单名

        menubar.add(menu1);// 将菜单加入到菜单条中

        menubar.add(menu2);

        menubar.add(menu3);

        this.setJMenuBar(menubar);// 将设置好的菜单条放在窗口中

        JPanel mb1, mb2, mb3, mb4;// 添加四个面板

        JButton b1[] = new JButton[3];

        JButton b2[] = new JButton[4];

        JButton b3[] = new JButton[20];

        text = new JTextArea();



        mb4 = new JPanel();

     

        mb2 = new JPanel();

        String[] a2 = { "MC""MR""MS""M+" };

        mb1 = new JPanel();

        String[] a1 = { "退格""CE""C" };

        mb3 = new JPanel();

        String[] a3 = { "7""8""9""/""sqrt""4""5""6""*""%""1""2""3""-""1/x""0""+/-"".",

                "+""=" };



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

            b1[i] = new JButton(a1[i]);



        for (int j = 0; j < b2.length; j++)

            b2[j] = new JButton(a2[j]);



        for (int k = 0; k < b3.length; k++)

            b3[k] = new JButton(a3[k]);



        for (int i = 0; i < 3; i++)

            b1[i].setForeground(Color.red);



        for (int m = 0; m < 4; m++)

            b2[m].setForeground(Color.red);

        b3[3].setForeground(Color.red);

        b3[8].setForeground(Color.red);

        b3[13].setForeground(Color.red);

        b3[18].setForeground(Color.red);

        b3[19].setForeground(Color.red);



        GridLayout g = new GridLayout(1388);

        mb1.setLayout(g);

        for (int z = 0; z < b1.length; z++)

            mb1.add(b1[z]);



        GridLayout v = new GridLayout(4188);

        mb2.setLayout(v);

        for (int x = 0; x < b2.length; x++)

            mb2.add(b2[x]);

        GridLayout b = new GridLayout(4588);

        mb3.setLayout(b);

        for (int c = 0; c < b3.length; c++)

            mb3.add(b3[c]);

        BorderLayout n = new BorderLayout();

        mb4.setLayout(n);

        mb4.add(mb1, BorderLayout.NORTH);

        mb4.add(mb2, BorderLayout.WEST);

        mb4.add(mb3, BorderLayout.CENTER);

        this.add(text, BorderLayout.NORTH);

        this.add(mb4, BorderLayout.CENTER);

        this.setSize(200200);

        this.setTitle("汤预的计算器");

        this.setLocation(100100);

        for (int k = 0; k < b3.length; k++) { // 为每一个事件(按钮)添加监视器

            b3[k].addActionListener(this);

        }

        for (int l = 0; l < b1.length; l++) { // 为每一个事件(按钮)添加监视器

            b1[l].addActionListener(this);

        }

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setVisible(true);

    }



    public void actionPerformed(ActionEvent e) // 事件处理

    {



        String lab = e.getActionCommand(); // 得到当前的按钮字符,后面进行匹配



        if (lab.equals("0")) // 处理按钮 0~9

        {

            sBuilder.append("0"); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString()); // 显示之前所有输入的数据

        } else if (lab.equals("1")) {

            sBuilder.append("1"); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString()); // 显示之前所有输入的数据

        } else if (lab.equals("2")) {

            sBuilder.append("2"); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString()); // 显示之前所有输入的数据

        } else if (lab.equals("3")) {

            sBuilder.append("3"); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString()); // 显示之前所有输入的数据

        } else if (lab.equals("4")) {

            sBuilder.append("4");

            text.setText(sBuilder.toString());

        } else if (lab.equals("5")) {

            sBuilder.append("5");

            text.setText(sBuilder.toString());

        } else if (lab.equals("6")) {

            sBuilder.append("6");

            text.setText(sBuilder.toString());

        } else if (lab.equals("7")) {

            sBuilder.append("7");

            text.setText(sBuilder.toString());

        } else if (lab.equals("8")) {

            sBuilder.append("8");

            text.setText(sBuilder.toString());

        } else if (lab.equals("9")) {

            sBuilder.append("9"); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString());

        } // 显示之前所有输入的数据

        else if (lab.equals("CE")) // 处理"CE"按钮事件 即清除当前的输入的数据

        {

            sBuilder.deleteCharAt(sBuilder.length() - 1); // StringBuilder的实例化对象调用方法下标减1即可

            text.setText(sBuilder.toString());

        } else if (lab.equals("C")) // 处理"C"按钮事件 即清除之前的输入所有的数据

        {

            sBuilder = new StringBuilder(); // 重新创建即可清除之前的输入所有的数据

            text.setText(sBuilder.toString());

        } else if (lab.equals(".")) // 处理按钮 "." 事件

        {

            sBuilder.append("."); // 利用StringBuilder类的对象调用方法,将数据存起来

            text.setText(sBuilder.toString()); // 显示之前输入的数据

        }



        else if (lab.equals("+")) // 处理+"按钮乘法

        {

            a = Double.parseDouble(sBuilder.toString()); // 将 运算符 之前的数据 作为第一个操作数 a

            i = 0;

            sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b

            text.setText("+");

        } else if (lab.equals("-")) // 处理"—"按钮乘法

        {

            a = Double.parseDouble(sBuilder.toString()); // 将前面的输入的数 作为第一个操作数a

            i = 1// 标记运算类型 即"÷"之前的数据即将作为因数

            sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b

            text.setText("-");

        } else if (lab.equals("*")) // 处理"x"按钮乘法

        {

            a = Double.parseDouble(sBuilder.toString()); // 将前面的输入的数 作为第一个操作数a

            i = 2// 标记运算类型 即"÷"之前的数据即将作为因数

            sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b

            text.setText("*");

        } else if (lab.equals("/")) // 处理"÷"按钮事件

        {

            i = 3// 标记运算类型 即"÷"之前的数据即将作为被除数

            a = Double.parseDouble(sBuilder.toString()); // 将除法的输入的数 作为第一个操作数a

            sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b

            text.setText("/");

        }



        else if (lab.equals("=")) {

            b = Double.parseDouble(sBuilder.toString()); // 一遇到"=",我们就能得到第二个操作数b

            if (i == 0// 加法 a+b

            {

                sum = a + b;

                text.setText(sum.toString()); // 输出第二个操作数已经输入的数据

                sBuilder = new StringBuilder(); // 清空数据,为后面的操作数留空间

                sBuilder.append(sum);

            } else if (i == 1// 加法 a-b

            {

                sum = a - b;

                text.setText(sum.toString());

                sBuilder = new StringBuilder(); // 清空数据,为后面的操作数留空间

                sBuilder.append(sum);

            } else if (i == 2// 乘法 a*b

            {

                sum = a * b;

                text.setText(sum.toString());

                sBuilder = new StringBuilder();

                sBuilder.append(sum);

            } else if (i == 3// 除法 a÷b

            {

                sum = a / b;

                text.setText(sum.toString());

                sBuilder = new StringBuilder();

                sBuilder.append(sum);

            }



        }

    }

}

点击阅读全文
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐