Java计算器

package main.java;

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


public class JFrameTest {

  private   JFrame jf;
  private JTextField jtf;

    boolean flag=false;
double firsetNumber=0;
String op="";
double secondNumber=0;
double result=0;



   public JFrameTest() {
        // 创建窗口
         jf = new JFrame();
        jf.setTitle("计算器");
        jf.setBounds(400, 300, 400, 400);

        // 设置关闭操作
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setLayout(new BorderLayout());





        // 工具栏:放置 JComboBox
        JPanel toolBar = new JPanel();
        toolBar.setLayout(new FlowLayout(FlowLayout.LEFT)); // 左对齐
        JComboBox<String> box1 = new JComboBox<>();
        box1.addItem("查看(v)");
        box1.addItem("1");
        box1.addItem("2");

        JComboBox<String> box2 = new JComboBox<>();
        box2.addItem("编辑(E)");
        box2.addItem("1");
        box2.addItem("2");

        JComboBox<String> box3 = new JComboBox<>();
        box3.addItem("帮助(H)");
        box3.addItem("1");
        box3.addItem("2");

        toolBar.add(box1);
        toolBar.add(box2);
        toolBar.add(box3);

        // 文本框
       jtf = new JTextField();
        jtf.setEditable(false); // 设置为不可编辑
        jtf.setFont(new Font("Arial", Font.BOLD, 24)); // 设置字体
        jtf.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
        jtf.setPreferredSize(new Dimension(300, 50)); // 设置高度

        // 创建一个新的面板来容纳工具栏和文本框
        JPanel northPanel = new JPanel();
        northPanel.setLayout(new BorderLayout());
        northPanel.add(toolBar, BorderLayout.NORTH);
        northPanel.add(jtf, BorderLayout.CENTER);

        jf.add(northPanel, BorderLayout.NORTH);




        // 按钮面板
        JPanel jp1 = new JPanel();
        jp1.setLayout(new GridLayout(6, 5, 5, 5)); // 6行5列,间距为5
        jp1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // 设置边距

        // 定义按钮的标签
        String[] buttons = {
                "MC", "MR", "MS", "M+", "M-",
                "<--", "CE", "C", "/", "%",
                "7", "8", "9", "*", "?",
                "4", "5", "6", "-", "?",
                "1", "2", "3", "+", "?",
                "0", ".", "=", "?", "?"
        };

        // 添加按钮到面板
        for (String label : buttons) {
            JButton jb = new JButton(label);
             jb.addActionListener(new MyButtonListener());
            jb.setFont(new Font("Arial", Font.PLAIN, 18)); // 设置按钮字体
            jp1.add(jb);
        }

        // 将按钮面板添加到窗口中间区域
        jf.add(jp1, BorderLayout.CENTER);

        jf.setVisible(true);
    }




    //事件处理fdf
    private class MyButtonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e){
            String command=e.getActionCommand();


            if(command.charAt(0)>='0'&&command.charAt(0)<='9'){
                //数字按钮
                if(flag){
                   jtf.setText(command);
                   flag=false;
                }else {
                    jtf.setText(jtf.getText()+command);
                }
            }else if(command.equals("C")){
                jtf.setText("");
                firsetNumber=0;
                op="";
            }else if(command.equals("=")){
                secondNumber=Double.parseDouble(jtf.getText());//这样可以连续运算
                result=myCalculate(firsetNumber,secondNumber,op);

                //jtf.setText(String.valueOf(result));
                String leftText="=";
                String rightText=String.valueOf(result);
                int totalWidth=55;//正好
                int paddingLength=totalWidth-leftText.length()-rightText.length();
                System.out.println("计算完成");
                if(paddingLength>0){
                    String padding =" ".repeat(paddingLength);
                    jtf.setText(leftText+padding+rightText);
                }else
                {
                    jtf.setText(leftText+rightText);
                }

                op="";

            }else if(command.equals("+")||command.equals("-")||command.equals(("*"))||command.equals("/")){
                firsetNumber=Double.parseDouble(jtf.getText());
                op=command;
                flag=true;


                String leftText=op;
                String rightText=jtf.getText();
                int totalWidth=55;//正好
                int paddingLength=totalWidth-leftText.length()-rightText.length();
                //System.out.println(paddingLength);
               if(paddingLength>0){
                   String padding =" ".repeat(paddingLength);
                   jtf.setText(leftText+padding+rightText);
               }else
               {
                   jtf.setText(leftText+rightText);
               }


            }


        }

    }

    private double myCalculate(double a,double b,String op){
       switch(op){
           case "+":
               return a+b;
           case "-":
               return a-b;
           case "*":
               return a*b;
           case "/":
               if(b!=0){
                   return a/b;
               }else {
                   JOptionPane.showMessageDialog(jf,"除数不能为零", "错误", JOptionPane.ERROR_MESSAGE);
                   return 0;
               }
           default:
               return 0;
       }
    }


    public static void main(String[] args) {
        JFrameTest test=new JFrameTest();
    }




}









posted @ 2025-04-19 14:47  某朝  阅读(9)  评论(0)    收藏  举报