初识java GUI 写一个简单的计算器

学到java GUI 就写一个简单的计算器来玩玩

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Sparks
 * @version 1.0
 */
public class Main {
    public static void main(String[] args) {
    new NewCulalator();

    }
}

class NewCulalator extends JFrame{
        JPanel panel = new JPanel(new GridLayout(4,4,3,3));
        JPanel p2 = new JPanel(new FlowLayout());

        JTextArea textArea = new JTextArea();
    JTextArea textArea2 = new JTextArea();
        JScrollPane scrollPane = new JScrollPane();
        JScrollPane scrollPane2 = new JScrollPane();
        JButton []buttons;
        String Flag = "";
        //String regex = "(^-?\\d+$)|(^(-?\\d+)(\\.\\d+)?$)";
        String regex = "[0-9.]+";
        DecimalFormat df = new DecimalFormat("0.00");


        String []str = {"1","2","3","+","4","5","6","-","7","8","9","*","0",".","=","/"};
        int []fh = {3,7,11,15};

    public NewCulalator(){
        init();
        setTitle("简易计算器");
        setSize(500,700);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);


    }

    private void init(){
        p2.setPreferredSize(new Dimension(500,320));
        textArea.setLineWrap(true);//自动换行
        textArea.setEditable(false);
       textArea.setBackground(Color.cyan);
       textArea.setFont(new Font("楷体",Font.TYPE1_FONT,60));

        scrollPane = new JScrollPane(textArea);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setPreferredSize(new Dimension(450,80));

        //textArea2.setLineWrap(true);//自动换行
        textArea2.setEditable(false);
        textArea2.setBackground(Color.cyan);
        textArea2.setFont(new Font("宋体",Font.TYPE1_FONT,30));

        scrollPane2 = new JScrollPane(textArea2);
        scrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollPane2.setPreferredSize(new Dimension(450,200));




        buttons = new JButton[str.length];

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

            buttons[i] = new JButton(str[i]);
            buttons[i].setFont(new Font("楷体",Font.TYPE1_FONT,60));

            panel.add(buttons[i]);
        }






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


            if(buttons[i].getText().equals("=")){
                buttons[i].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int f = 1;
                        if(Flag.equals("")){
                            textArea2.append("请输入数值和运算符进行计算!"+"\n");
                        }else {
                            for(int j = 0; j < fh.length;j++){
                                buttons[fh[j]].setEnabled(true);
                            }
                            String str = textArea.getText();
                            Pattern pattern = Pattern.compile(regex);
                            Matcher matcher = pattern.matcher(str);
                            double sum;
                            int c = 0;
                            double []text = {0,0};
                            while(matcher.find()){
                                String num_str = matcher.group();
                                try {
                                    text[c] = Double.parseDouble(num_str);

                                }catch (Exception e1){
                                    textArea2.append("请输入数值和运算符进行计算!"+"\n");
                                    f = 0;
                                }
                                c++;
                            }


                            switch(Flag){
                                case "+":
                                    sum = text[0] + text[1];
                                    break;
                                case "-":
                                    sum = text[0] - text[1];
                                    break;
                                case "*":
                                    sum = text[0] * text[1];
                                    break;
                                case "/":
                                    sum = text[0] / text[1];
                                    break;
                                default:
                                    throw new IllegalStateException("没有这个符号: " + Flag);
                            }
                            if(f == 1){
                                textArea2.append(text[0] + Flag + text[1] +" = "+df.format(sum)+"\n");
                            }

                            textArea.setText("");
                            Flag = "";
                        }



                    }
                });

                continue;
            }



            if(buttons[i].getText().equals("+")||buttons[i].getText().equals("-")||buttons[i].getText().equals("*")||buttons[i].getText().equals("/")){
                buttons[i].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        //buttons[14].setEnabled(false);

                        Flag = buttons[finalI].getText().toString();
                        textArea.append(buttons[finalI].getText());
                        for(int j = 0; j < fh.length;j++){
                            buttons[fh[j]].setEnabled(false);
                        }
                    }
                });
                continue;
            }




            buttons[i].addActionListener(new ActionListener() {
               @Override
               public void actionPerformed(ActionEvent e) {
                   textArea.append(buttons[finalI].getText());
                   //buttons[14].setEnabled(true);


               }
           });


        }







        setLayout(new BorderLayout());
        p2.add(scrollPane2);
        p2.add(scrollPane);
        getContentPane().add(p2,BorderLayout.NORTH);
        getContentPane().add(panel,BorderLayout.CENTER);


    }


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值