用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("");
}
}
输出结果:
加号左右的方框中输入数字,点击等号后,等号右侧方框显示两数字相加结果。
上面的代码有三个类,分别用作主函数,界面,和监听事件。
界面调用监听事件,主函数调用界面。
用组合类的方法
代码:
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("");
}
}
}
输出结果与前两个方法相同。
这个方法中,监听事件成为了界面的内部类,这让监听事件更容易获取界面的信息。