闲来无事,学学图形界面开发,没准什么时候自己写个东西,会有很实用的价值。
一直没想明白,当点击按钮的时候,怎么获取其他如文本框的属性值??
今天看了马士兵老师的视频,通过一种门面模式的方法,将所需要获取的类添加到自己的成员变量里来,如将文本框的所属的类注入到按钮监听类的属性中,就可以轻松获取该类中所有的公共属性了。
package com.gui._02actionlistener;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 加法计算器简单实现
* 1.获取其他域的值
* 2.窗口关闭事件
* @author Administrator
*
*/
public class TextField_NumAdd {
public static void main(String[] args) {
new TFFrame_2Num().buildFrame();
}
}
/**
* 创建窗口
* @author Administrator
*
*/
class TFFrame_2Num extends Frame{
//定义3个成员变量
TextField num1,num2,result;
public void buildFrame(){
num1 = new TextField(10);
num2 = new TextField(10);
result = new TextField(15);
Label labelAdd = new Label(" + ");
Button btnEq = new Button(" = ");
//添加点击事件
btnEq.addActionListener(new AddActionListener(this));
setTitle("two nums add");
setLayout(new FlowLayout());
//窗口关闭事件
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//xx + xx = xx
add(num1);
add(labelAdd);
add(num2);
add(btnEq);
add(result);
pack();
setVisible(true);
setLocationRelativeTo(null);
}
}
class AddActionListener implements ActionListener{
//定义Frame成员变量,为了获取Frame的属性值
TFFrame_2Num tf;
public AddActionListener(TFFrame_2Num tf){
this.tf = tf;
}
@Override
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(tf.num1.getText());
int n2 = Integer.parseInt(tf.num2.getText());
tf.result.setText((n1+n2)+ "");
}
}
窗口关闭事件的话,如果实现了Frame类,重写Frame的addWindowListener()方法,参数是new一个new WindowAdapter(),然后再实现new WindowAdapter()的windowClosing的方法,添加System.exit(0);就可以了。
<span> </span>//窗口关闭事件
<span> </span>Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});