[Java]Swing基础编程【3】内部类

本文介绍了一种使用内部类作为事件监听器的设计方法,通过在监听器中持有外部类的引用,可以方便地访问外部类的成员变量。这种方式遵循了门面模式的原则,简化了对外部类成员的访问。

继上一章,下面介绍一种更优雅的方式使事件监听器访问事件源对象成员。把监听器定义为内部类!

改进后的代码如下:

/**
 * 
 */
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Set;

import javax.swing.*;
import javax.swing.event.*;

/**
 * @author wangyubin
 * 点击按钮,让第一个文本框中的数与第二个文本框中的数相加
 * 持有对方的引用   在监听器中传入JFrame容器,则可以在监听中得到全部成员变量。这叫做门面模式,通过一个门面与其内部成员打交道
 */
public class TFMath {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		new TFFrame().launchFrame();
	}

}
class TFFrame extends JFrame{
	JTextField num1,num2,num3;
	public void launchFrame(){
		num1=new JTextField(10);
		num2=new JTextField(10);
		num3=new JTextField(15);
		JLabel lb1Plus=new JLabel("+");
		JButton btnEqual=new JButton("=");
		
		btnEqual.addActionListener(new MyMonitor());
		setLayout(new FlowLayout());
		add(num1);
		add(lb1Plus);
		add(num2);
		add(btnEqual);
		add(num3);
		pack();
		setVisible(true);
	}
	class MyMonitor implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO 自动生成的方法存根	
			int n1=Integer.parseInt(num1.getText());
			int n2=Integer.parseInt(num2.getText());
			num3.setText(""+(n1+n2));
}

	}
	
}

这是一种常用的方式。另外还可以在内部类前加入private以免被其他类意外调用。 

注意,在类里边定义的类叫做内部类,它与类中的方法是平级的,而在方法中定义的类叫做局部类,它比内部类更局部。

当含有内部类的类被编译时会生成一个“类名$内部类名.class” 的文件,如把上面代码编译后,将生成三个文件,分别是:TFMath.class,TFFrame.class和TFFrame$MyMonitor.class


其实在之前的事件监听中使用的类只是在awt.event包中的接口,注意到还有一个Swing.event的包,相信里面会有更好用的事件监听接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值