转载

java中的事件监听机制

java中的事件监听机制:


1:简单的按钮事件监听

说明:比如为按钮添加事件监听机制,首先得给它安上个monitor,通过addActionListener

函数,添加上,之后如果你点击了按钮,监听器就可以监听到这个事件,并且激活某种

动作,按钮的动作就是重写actionPerformed函数,也就是,如果你点击了按钮就会回掉

actionPerformed函数

代码:

<span style="font-size:18px;"><span style="font-size:24px;">import java.awt.*;
import java.awt.event.*;
public class TestEvent
{
	public static void main(String args[])
	{
		MyFrame myFrame = new MyFrame();
		Button btn = new Button("Test");
		btn.setBounds(200, 200, 50, 50);
		btn.addActionListener(new Monitor());
		myFrame.add(btn);
	}
}


class MyFrame extends Frame
{
	MyFrame()
	{
		setBounds(700, 200, 600, 600);
		setBackground(Color.blue);
		setLayout(null);
		setVisible(true);
	}
}

class Monitor implements ActionListener
{
	public void actionPerformed(ActionEvent e)
	{
		System.out.println("Successful");
	}</span>
<span style="font-size:24px;">}</span></span>


2:内部类在事件监听中的作用

有时候,我们的监听器的响应函数要访问事件源的成员方法或者成员对象,这时候

外部定义监听器类就不好用了,虽然可以通过getSource();函数但是还是不方便,

这时定义内部类就有必要了,首先无限制得可以访问成员函数,成员变量,

还有可以把内部类设置为private防止别人访问你的监听器类,我这个程序定义

了两个嵌套类

<span style="font-size:18px;">import java.awt.*;
import java.awt.event.*;

public class TestEvent
{
	public static void main(String args[])
	{
		MyFrame myFrame = new MyFrame();		
	}
}


class MyFrame extends Frame
{
	MyFrame()
	{
		setBounds(700, 200, 800, 600);
		setBackground(Color.blue);
		setLayout(new BorderLayout());
		this.add(new panel(), BorderLayout.CENTER);
		setVisible(true);
	}
	
	class panel extends Panel
	{
		TextField textField[]; //创建数组引用
		Button btn;
		
		panel()
		{
			this.setLayout(new FlowLayout(FlowLayout.CENTER));
			TextField textFieldTemp[] = 
			{
				new TextField(12),
				new TextField(12),
				new TextField(12),
			};
			
			for(TextField i : textFieldTemp)
			{
				i.setFont(new Font("宋体", 1, 22));
			}
			textField = textFieldTemp;
			
			Label label = new Label("+", Label.CENTER);
			label.setFont(new Font("宋体", 1, 22));
			btn = new Button("=");
			btn.setFont(new Font("宋体", 1 , 22));
			btn.addActionListener(new Monitor());
			this.add(textField[0]);
			this.add(label);
			this.add(textField[1]);
			this.add(btn);
			this.add(textField[2]);
		}
		
		class Monitor implements ActionListener
		{
			public void actionPerformed(ActionEvent e)
			{
				int a = Integer.parseInt(textField[0].getText());
				int b = Integer.parseInt(textField[1].getText());
				int c = a + b;
				textField[2].setText("" + c);
			}
		}
	}
}

</span>


3:Listener的适配器类, 和内部类在事件监听中应用

说明:按照常理来说,如果你要为某个事件源添加监听器接口,你要实现其所有的方法

这势必造成麻烦,所以java提供了监听器的适配器类,这个类实现了Listener接口的所有方法,

这个实现只是, function{ }; ,并没有具体的内容,所以你要添加监听的时候

只需要继承这个类,然后重写你要监听的事件的函数!这样很方便

内部类可以在new类的时候,直接建立这个类的模型,我下面的类可以很清楚看出这一点

<span style="font-size:18px;">import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class TestFaceless
{
	public static void main()
	{
		new frame();
	}
}

class frame extends Frame
{
	ArrayList<Point> arrayList;
	
	frame()
	{
		setBounds(700, 200, 600, 600);
		setBackground(Color.white);
		setVisible(true);
		
		this.addMouseListener(new MouseAdapter(){ //一个内部类, 又是一个Listener适配器
			
			public void mouseClicked(MouseEvent e) 				
			{                                      
				Frame f = (Frame) e.getSource();
				int x = e.getX();
				int y = e.getY();
				addPoint(new Point(x, y));
				f.repaint();
			}
			
		});
	}
	
	public void addPoint(Point point)
	{
		arrayList.add(point);
	}
	
	public void paint(Graphics g) //重画函数
	{
		g.setColor(Color.black);
		Iterator<Point> it1 = arrayList.iterator();
		
		while(it1.hasNext()) 
		{
			Point p = it1.next();
			int a = p.getX(); 
			int b = p.getY();
			g.fillOval(a, b, 10, 10);
		}
	}
}</span>


正文到此结束
本文目录