最终效果:
代码:
import java.awt.*; //这个包中包含了绘制图形的类
import java.awt.event.*; //包含事件处理类
public class TestTF_3
{
public static void main(String[] args)
{
new TF().launch();
}
}
class TF
{
public TextField tf1, tf2, tf3; //定义三个文本框属性
public void launch() //启动方法
{
Frame f = new Frame("文本框相加运算"); //顶层窗口
tf1 = new TextField(30); //创建一个文本框对象
tf2 = new TextField(30);
tf3 = new TextField(30);
Button bn = new Button("="); //创建一个按钮对象
Label lb = new Label("+"); //创建一个标签对象
f.setLayout(new FlowLayout()); //重新设置为流式布局
f.add(tf1); //添加到f对象中
f.add(lb);
f.add(tf2);
f.add(bn);
f.add(tf3);
bn.addActionListener(new MyMonitor()); //为按钮添加事件处理
f.pack(); //根据组件大小自动调整父窗口大小,使之能刚好包上
f.addWindowListener(new Off()); //为f添加一个事件监听器
f.setVisible(true); //设置窗口可见
}
class MyMonitor implements ActionListener //内部类 使MyMonitor类可以访问TF类的成员
/*这里继承接口是应为ActionListener接口中恰好只有一个方法*/
{
public void actionPerformed(ActionEvent e) //重写方法
{
int num1 = Integer.parseInt(tf1.getText()); //将字符串转换为整形
int num2 = Integer.parseInt(tf2.getText());
int num3 = num1 + num2;
tf3.setText(num3 + ""); //将整形转换为字符串类型
}
}
class Off extends WindowAdapter //这里选择继承类而不是接口是避免重写接口所有方法
{
@Override //表示下面一个方法是重写父类的,如果有错就会有提示
public void windowClosing(WindowEvent e) //重写方法
{
Frame f=(Frame)e.getSource(); //如果有多个组件事件会自动识别调用方法处理
f.setVisible(false); //设为不可见,可以不用
System.exit(-1); //强制关闭窗口
}
}
}