GUI实现超简单的计算器

计算器样式

在这里插入图片描述

实现代码

//实现超简易的计算器
public class Test02 {
    public static void main(String[] args) {
        Counter counter = new Counter();
    }
}


//计算器类
class Counter extends Frame{
    public Counter() {
        super("简易计算器");
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        //3个文本框
        TextField t1 = new TextField(5);
        TextField t2 = new TextField(5);
        TextField t3 = new TextField(10);

        //1个标签
        Label label = new Label("+");

        //1个按钮
        Button button = new Button("=");

        //给按钮添加监听
        button.addActionListener(new myCounterListener(t1,t2,t3));

        this.add(t1);
        this.add(label);
        this.add(t2);
        this.add(button);
        this.add(t3);
        this.pack();
        this.setVisible(true);
    }
}

//监听类
class myCounterListener implements ActionListener{
    TextField t1;
    TextField t2;
    TextField t3;

    public myCounterListener(TextField t1, TextField t2, TextField t3) {
        this.t1 = t1;
        this.t2 = t2;
        this.t3 = t3;
    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        //1.获取加数和被加数
        int left = Integer.parseInt(t1.getText());
        int right = Integer.parseInt(t2.getText());

        //2.两数相加,和传给第三个框
        t3.setText(""+(left+right));

        //3.清除前两个框
        t1.setText("");
        t2.setText("");

        System.out.println("计算结束");
    }
}

功能实现,不过用的是面向过程编程,好像太丑了a…

重构!

//面向对象+内部类思想重构
public class Test02Up {
    public static void main(String[] args) {
        new CounterUp().loadFrame();
    }
}


//计算器类
class CounterUp extends Frame {
    //属性
    TextField t1;
    TextField t2;
    TextField t3;

    //方法
    void loadFrame() {
        setTitle("简易计算器");
        t1 = new TextField(5);
        t2 = new TextField(5);
        t3 = new TextField(10);
        Label label = new Label("+");
        Button button = new Button("=");

        //给按钮添加监听
        button.addActionListener(new myCounterListenerUp());

        //布局
        setLayout(new FlowLayout(FlowLayout.CENTER));
        add(t1);
        add(label);
        add(t2);
        add(button);
        add(t3);

        pack();
        setVisible(true);
    }

    //监听类
    //内部类的优点,可以直接访问外部类的属性
    class myCounterListenerUp implements ActionListener {
//        /*获取计算器这个对象,在一个类中组合另外一个类(和继承功能类似)*/
//        CounterUp counterUp = null;
//
//        public myCounterListenerUp(CounterUp counterUp) {   /*直接传入对象,操作对象的属性*/
//            this.counterUp = counterUp;
//        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            //1.获取加数和被加数
            //2.两数相加,和传给第三个框
            //3.清除前两个框
            int left = Integer.parseInt(t1.getText());
            int right = Integer.parseInt(t2.getText());
            t3.setText("" + (left + right));
            t1.setText("");
            t2.setText("");

            System.out.println("计算结束");
        }
    }
}

嗯,比之前好看多了@~@

总结:

  1. String类型要用 **Integer.parseInt()**方法转int型,相反,则用 “”+int 转String型。
  2. 面向对象编程强调对象的属性和方法,操作时,应尽量调用对象本身,再通过对象调用属性和方法。
  3. 内部类的优点,可以畅通无阻的访问外部类的属性,所以建议尽量使用内部类。
posted @ 2020-03-28 17:57  shimmernight  阅读(506)  评论(0编辑  收藏  举报