综合项目-【简易计算器】GUI设计

一、设计布局

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

如上就是我设计的按钮布局。

二、窗口设置及输入框。

//输入框面板
        JPanel jPane1 = new JPanel();
        this.add(jPane1);

//键盘面板
        JPanel jPane2 = new JPanel(new GridLayout(5, 4));//


        ButtonAction a = new ButtonAction();
        KeyAction b = new KeyAction();
        for (int i = 0; i < x; i++) {
            jButton[i] = new JButton(function[i]);
            jButton[i].addActionListener(a);
            jButton[i].addKeyListener(b);
            jPane2.add(jButton[i]);
//按钮大小
            Font font = new Font("Computer", Font.BOLD, 28);
            jButton[i].setFont(font);
        }


//组装
//输入组件rgb颜色
        jPane1.setBackground(new Color(255, 255, 255));


//输入框位置
        this.add(jPane1, BorderLayout.NORTH);
        this.add(jPane2, BorderLayout.CENTER);
        jPane1.add(jTextField, BorderLayout.WEST);

        this.setVisible(true);
        this.setBounds(0, 0, 400, 350);

    }

菜单设置

//菜单栏
        JMenuBar jMenuBar = new JMenuBar();
        JMenu jMenu1 = new JMenu("菜单");
        JMenuItem jMenuItem1 = new JMenuItem("帮助");
        JMenuItem jMenuItem2 = new JMenuItem("科学计算器");
        JMenuItem jMenuItem3 = new JMenuItem("打开新的计算器");

        jMenu1.add(jMenuItem1);
        //添加分割线
        jMenu1.addSeparator();
        jMenu1.add(jMenuItem2);
        jMenu1.addSeparator();
        jMenu1.add(jMenuItem3);

        jMenuBar.add(jMenu1);

        this.setJMenuBar(jMenuBar);

三、事件源的响应

//输入框面板
        JPanel jPane1 = new JPanel();
        this.add(jPane1);

//键盘面板
        JPanel jPane2 = new JPanel(new GridLayout(5, 4));//


        ButtonAction a = new ButtonAction();
        KeyAction b = new KeyAction();
        for (int i = 0; i < x; i++) {
            jButton[i] = new JButton(function[i]);
            jButton[i].addActionListener(a);
            jButton[i].addKeyListener(b);
            jPane2.add(jButton[i]);
//按钮大小
            Font font = new Font("Computer", Font.BOLD, 28);
            jButton[i].setFont(font);
        }


//组装
//输入组件rgb颜色
        jPane1.setBackground(new Color(255, 255, 255));


//输入框位置
        this.add(jPane1, BorderLayout.NORTH);
        this.add(jPane2, BorderLayout.CENTER);
        jPane1.add(jTextField, BorderLayout.WEST);

        this.setVisible(true);
        this.setBounds(0, 0, 400, 350);

    }

四、核心算法,计算过程

    //计算算法
    public void calculate(double a) {
        if (symbol.equals("-"))
            num -= a;
        else if (symbol.equals("+"))
            num += a;
        else if (symbol.equals("/"))
            num /= a;
        else if (symbol.equals("*"))
            num *= a;
        else if (symbol.equals("="))
            num = a;
        jTextField.setText("" + num);
    }

五、窗口初始化

    //创建程序
    public static void main(String[] args) {
        new jiSuanqi();
    }


    private class KeyAction extends KeyAdapter {

        public void keyTyped(KeyEvent e) {
            char key = e.getKeyChar();
            if (key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9') {
                if (flag) {
                    jTextField.setText("");
                    flag = false;
                }
                jTextField.setText(jTextField.getText() + key);
            } else if (key == '+' || key == '-' || key == '/' || key == '*') {
                if (flag) {
                    if (key == '-') {
                        jTextField.setText(String.valueOf(key));
                        flag = false;
                    } else
                        symbol = String.valueOf(key);

                } else {
                    calculate(Double.parseDouble(jTextField.getText()));
                    symbol = String.valueOf(key);
                    flag = true;
                }
            }
        }

    }

六、完整代码

package JISUANQI;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


class jiSuanqi extends JFrame {


    private String[] function = {"+", "-", "*", "/", "7", "8", "9", "<-", "4", "5", "6", "C", "1", "2", "3", "=", ".", "0", "=", "=",};
    int x = function.length;
    JButton[] jButton = new JButton[x];
    private double num = 0;
    //累加器
    private String symbol = "=";
    //判断标志
    private boolean flag = true;
    //文本框大小
    private JTextField jTextField = new JTextField(25);

    public jiSuanqi() {
        //菜单栏
        JMenuBar jMenuBar = new JMenuBar();
        JMenu jMenu1 = new JMenu("菜单");
        JMenuItem jMenuItem1 = new JMenuItem("帮助");
        JMenuItem jMenuItem2 = new JMenuItem("科学计算器");
        JMenuItem jMenuItem3 = new JMenuItem("打开新的计算器");

        jMenu1.add(jMenuItem1);
        //添加分割线
        jMenu1.addSeparator();
        jMenu1.add(jMenuItem2);
        jMenu1.addSeparator();
        jMenu1.add(jMenuItem3);

        jMenuBar.add(jMenu1);

        this.setJMenuBar(jMenuBar);
//输入框面板
        JPanel jPane1 = new JPanel();
        this.add(jPane1);

//键盘面板
        JPanel jPane2 = new JPanel(new GridLayout(5, 4));//


        ButtonAction a = new ButtonAction();
        KeyAction b = new KeyAction();
        for (int i = 0; i < x; i++) {
            jButton[i] = new JButton(function[i]);
            jButton[i].addActionListener(a);
            jButton[i].addKeyListener(b);
            jPane2.add(jButton[i]);
//按钮大小
            Font font = new Font("Computer", Font.BOLD, 28);
            jButton[i].setFont(font);
        }


//组装
//输入组件rgb颜色
        jPane1.setBackground(new Color(255, 255, 255));


//输入框位置
        this.add(jPane1, BorderLayout.NORTH);
        this.add(jPane2, BorderLayout.CENTER);
        jPane1.add(jTextField, BorderLayout.WEST);

        this.setVisible(true);
        this.setBounds(0, 0, 400, 350);

    }


    //监听运算
    private class ButtonAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {

            String input = e.getActionCommand();
            if (input.equals("C")) {
                String m = jTextField.getText();
                m = "";
                jTextField.setText(m);
            } else if (input.equals("<-")) {
                String a = jTextField.getText();
                int b = a.length() - 1;

                jTextField.setText(a.substring(0, b));
                if (jTextField.getText().length() == 0) {
                    jTextField.setText(" ");
                }
            } else if (input.equals("-") || input.equals("+") || input.equals("=") || input.equals("/") ||
                    input.equals("*")) {
                if (flag) {
                    if (input.equals("-")) {
                        jTextField.setText(input);
                        flag = false;
                    } else
                        symbol = input;
                } else {
                    calculate(Double.parseDouble(jTextField.getText()));
                    symbol = input;
                    flag = true;

                }
            } else {
                if (flag) {
                    jTextField.setText("");
                    flag = false;
                }
                jTextField.setText(jTextField.getText() + input);
            }

        }
    }


    //计算算法
    public void calculate(double a) {
        if (symbol.equals("-"))
            num -= a;
        else if (symbol.equals("+"))
            num += a;
        else if (symbol.equals("/"))
            num /= a;
        else if (symbol.equals("*"))
            num *= a;
        else if (symbol.equals("="))
            num = a;
        jTextField.setText("" + num);
    }


    //创建程序
    public static void main(String[] args) {
        new jiSuanqi();
    }


    private class KeyAction extends KeyAdapter {

        public void keyTyped(KeyEvent e) {
            char key = e.getKeyChar();
            if (key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9') {
                if (flag) {
                    jTextField.setText("");
                    flag = false;
                }
                jTextField.setText(jTextField.getText() + key);
            } else if (key == '+' || key == '-' || key == '/' || key == '*') {
                if (flag) {
                    if (key == '-') {
                        jTextField.setText(String.valueOf(key));
                        flag = false;
                    } else
                        symbol = String.valueOf(key);

                } else {
                    calculate(Double.parseDouble(jTextField.getText()));
                    symbol = String.valueOf(key);
                    flag = true;
                }
            }
        }

    }
}

七、运行结果

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值