java GUI 实现简陋计算器 动作监听器初步 按下数字或者运算符时,在文本框中显示相应的内容

第一次实现简陋计算器

实验内容及其实验要求

1.按下数字或者运算符时,在文本框中显示相应的内容
如下图

计算器面板的实现在另一篇文章有详细注释

这里完成了前四点 第五点在另一篇文章完成
在这里插入图片描述

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

import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

public class Test03{


    /*public Test01(String title){

        super(title);
        setLayout(new BorderLayout(2,2));
        add(new JTextField(5), "North");
        add(new JPanel(new GridBagLayout()), "Center");
        add(new JPanel(new FlowLayout()), "South");*/




    public static void main(String[] args){

        //这里是用于计算所创建的列表
        //List cheng = new List();


        String str[] = {"%","CE","C","<-","7","8","9","*","4","5","6","-","1","2","3","+"};


        Font sansSerif = new Font("Times", Font.BOLD, 12);

        JFrame frame = new JFrame("计算器");



        JPanel jPanel1 = new JPanel();
        JPanel jPanel2 = new JPanel();
        JPanel jPanel3 = new JPanel();

        jPanel3.setLayout(new GridLayout(1,3,2,2));


        JButton jButton1 = new JButton("0");
        JButton jButton2 = new JButton(".");
        JButton jButton3 = new JButton("=");


/*      String text = jButton2.getText();
        System.out.println(text);
*/

        JTextField jTextfield = new JTextField(5);

        jTextfield.setFont(sansSerif);
        //这里是一个匿名内部类完成动作监听 当鼠标点击会发生actionPerformed()方法内的事件
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //显示的文字
                //这里表示将文本框设置为文本框本来的内容追加按钮本身的内容
                jTextfield.setText(jTextfield.getText()+jButton1.getText());

            }
        });
        jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //同上
                jTextfield.setText(jTextfield.getText()+jButton2.getText());
                /*jTextField.setBackground();*/
            }
        });
        jButton3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //显示的文字
                jTextfield.setText(jTextfield.getText()+jButton3.getText());

            }
        });

        jPanel3.add(jButton1);
        jPanel3.add(jButton2);
        jPanel3.add(jButton3);

        jPanel2.setLayout(new GridLayout(4,4,2,2));
        JButton btn[] = new JButton[str.length];



        for(int i = 0;i<str.length;i++){
            btn[i] = new JButton(str[i]);
            jPanel2.add(btn[i]);
            jPanel2.setFont(sansSerif);
            //外部类定义一个数等于i
            int finalI = i;

            if (i == 1) {


                btn[1].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("这里是CE");
                        //设置index的初始值为0
                        int index = 0;
                        String text1 = jTextfield.getText();
                        System.out.println(text1);
                        //System.out.println(text1.charAt(text1.length()-2));
                        //将文本内容从后到前依次遍历 知道找到+符号时,令index等于将此时循环的i
                        for (int i = (text1.length() - 1); i >= 0; i--) {
                            if (text1.charAt(i) =='-'||text1.charAt(i) =='+'||text1.charAt(i) =='*'||text1.charAt(i) =='%') {
                                System.out.println("相等");
                                index = i;
                                System.out.println(index);
                                //========================当找到第一个符号就要跳出本次循环========================
                                //========================当找到第一个符号就要跳出本次循环========================
                                //========================当找到第一个符号就要跳出本次循环========================
                                //========================当找到第一个符号就要跳出本次循环========================
                                //========================当找到第一个符号就要跳出本次循环========================
                                //========================当找到第一个符号就要跳出本次循环========================
                                break;
                            }
                        }
                        //字符串截取,我们所截取到的+号前的数据来组成新的字符串
                        String result = text1.substring(0,index);
                        //显示结果
                        jTextfield.setText(result);

                    }
                });
            }

            else if (i == 2){

                btn[2].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        //这里是一个C按钮
                        System.out.println("这里是C");

                        //直接清空文本框
                        jTextfield.setText("");
                    }
                });

            }
            else if (i == 3){

                btn[3].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("这里是退格键");
                        //这里是一个退格键,我们获得字符串的长度,将其截取为0到length-1的新字符串
                        int length = jTextfield.getText().length();
                        //截取0到length-1
                        String result = jTextfield.getText().substring(0,length-1);
                        jTextfield.setText(result);

                    }
                });

            }else if (i == 7){
                btn[7].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        jTextfield.setText(jTextfield.getText()+btn[finalI].getText());
                        System.out.println("这里是乘法");
                    }
                });
            }

            else {
                btn[i].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        //循环,每点击一个键的时候,将文本框设置为原来的追加当前键的值
                        jTextfield.setText(jTextfield.getText()+btn[finalI].getText());
                    }
                });
            }
        }








        jPanel1.setSize(300,200);
        jPanel1.setLayout(new BorderLayout(2,2));
        jPanel1.add(jTextfield, "North");
        jPanel1.add(jPanel2, "Center");
        jPanel1.add(jPanel3, "South");


        frame.setContentPane(jPanel1);




        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.pack();
        frame.setVisible(true);


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值