用gui制作简易加法计算器

用gui制作简易加法计算器

本文用三种方式制作计算器。

原始方法

代码如下:

package com.cxf.gui.two;

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

public class Calculator {
    public static void main(String[] args) {
        Cal cal = new Cal();
    }
}


class Cal extends Frame{
    public Cal(){   // create function
        TextField text1 = new TextField(10);
        Label label = new Label("+");
        TextField text2 = new TextField(10);
        Button eq = new Button("=");
        TextField text3 = new TextField(10);

        setLayout(new FlowLayout());
        add(text1);
        add(label);
        add(text2);
        add(eq);
        add(text3);
        setVisible(true);
        setLocation(400,400);
        pack();

        //listener
        eq.addActionListener(new MyListener(text1,text2,text3));
    }
}

class MyListener implements ActionListener{
    public TextField tt1,tt2,tt3;
    public MyListener(TextField t1,TextField t2,TextField t3){
        tt1 = t1;
        tt2 = t2;
        tt3 = t3;
    }
    public void actionPerformed(ActionEvent e){
        int result = Integer.parseInt(tt1.getText()) + Integer.parseInt(tt2.getText());
        tt3.setText(""+result); //when text3 goes to tt3, tt3 changing results in text3 changing,they are the same thing
        tt1.setText("");
        tt2.setText("");
    }
}

输出结果:

用gui制作简易加法计算器

加号左右的方框中输入数字,点击等号后,等号右侧方框显示两数字相加结果。

上面的代码有三个类,分别用作主函数,界面,和监听事件。

界面调用监听事件,主函数调用界面。

用组合类的方法

代码:

package com.cxf.gui.three;

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

public class Calculator {
    public static void main(String[] args) {
        Cal cal = new Cal();
        cal.LoadCal();
    }
}


class Cal extends Frame {

    public TextField text1,text2,text3;

    public void LoadCal(){   // create function
        text1 = new TextField(10);
        Label label = new Label("+");
        text2 = new TextField(10);
        Button eq = new Button("=");
        text3 = new TextField(10);

        setLayout(new FlowLayout());
        add(text1);
        add(label);
        add(text2);
        add(eq);
        add(text3);
        setVisible(true);
        setLocation(400,400);
        pack();

        //listener
        eq.addActionListener(new MyListener(this));
    }
}

class MyListener implements ActionListener {
    public Cal cal1;
    public MyListener(Cal cal){ //combining another class ,which means example as a variable.
        cal1 = cal;
    }
    public void actionPerformed(ActionEvent e){
        int result = Integer.parseInt(cal1.text1.getText()) + Integer.parseInt(cal1.text2.getText());
        cal1.text3.setText("" + result); //when text3 goes to tt3, tt3 changing results in text3 changing,they are the same thing.
        cal1.text2.setText("");
        cal1.text1.setText("");
    }
}

输出结果与原始方法相同。

这个方法与原始方法的不同之处在于,原始方法把界面的属性传递给监听事件,这个方法把界面对象传递给了监听事件。

这个方法与原始方法相比,更富含类的思想。

用内部类的方法

代码如下:

package com.cxf.gui.four;


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

public class Calculator {
    public static void main(String[] args) {
        Cal cal = new Cal();
        cal.LoadCal();
    }
}

class Cal extends Frame {

    public TextField text1,text2,text3;

    public void LoadCal(){   // create function
        text1 = new TextField(10);
        Label label = new Label("+");
        text2 = new TextField(10);
        Button eq = new Button("=");
        text3 = new TextField(10);

        setLayout(new FlowLayout());
        add(text1);
        add(label);
        add(text2);
        add(eq);
        add(text3);
        setVisible(true);
        setLocation(400,400);
        pack();

        //listener
        eq.addActionListener(new MyListener());
    }
    private class MyListener implements ActionListener {
        public void actionPerformed(ActionEvent e){
            int result = Integer.parseInt(text1.getText()) + Integer.parseInt(text2.getText());
            text3.setText("" + result); //when text3 goes to tt3, tt3 changing results in text3 changing,they are the same thing.
            text2.setText("");
            text1.setText("");
        }
    }
}

输出结果与前两个方法相同。

这个方法中,监听事件成为了界面的内部类,这让监听事件更容易获取界面的信息。

上一篇:Python 的历史和哲学


下一篇:(Java实现) 过河卒