您的位置:首页 > 编程语言 > Java开发

java中的事件监听机制

2016-09-20 15:50 357 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息