Swing 事件模型由三个部分组成:事件源,事件和监听程序。
事件源即触发事件的操作的组件,如键盘输入,鼠标点击,点击按钮等。事件源触发事件,事件被监听器监听并处理。
事件监听器是一个“实现特定类型监听器接口”的类对象,事件是某一种事件类的对象,事件源根据用户的操作创建对应的事件类的对象。例如按钮(JButton)事件源创建动作事件对象(ActionEvent)。在监听器的类中实现相应的事件监听器接口,最后事件源再调用事件监听器对象中方法来完成对事件的处理。
常见的Swing事件有鼠标事件(MouseEvent),键盘事件(KeyEvent),动作事件(ActionEvent),对应的监听器为鼠标监听器(MouseListener)、键盘监听器(KeyListener)、动作监听器(ActionListener)。
这些监听器接口都包含在java.awt.event包中。
鼠标监听器的声明如下:
package java.awt.event;
import java.util.EventListener;
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
//鼠标点击方法
public void mousePressed(MouseEvent e);
//鼠标按住方法
public void mouseReleased(MouseEvent e);
//鼠标释放方法
public void mouseEntered(MouseEvent e);
//鼠标进入方法
public void mouseExited(MouseEvent e);
//鼠标退出方法
}
将一个类实现鼠标监听器接口,在类中重写这些鼠标监听器方法,就可以处理对应的鼠标事件。
public void mouseClicked(MouseEvent e) {
System.out.println(flag);
if(flag == 1)
{
x1 = e.getX();
y1 = e.getY();
g.drawOval(x1,y1,50,30);
}
if(flag == 2)
{
x2 = e.getX();
y2 = e.getY();
g.drawRect(x2,y2,40,30);
}
如重写mouseClicked(MouseEvent)方法这段代码可以在鼠标点击的地方绘图。
动作监听器的声明如下:
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
动作事件在点击Jbutton类的按钮时发生。
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="Oval")
{
flag = 1;
System.out.println(flag);
}
if(e.getActionCommand()=="Rectangle")
{
flag = 2;
System.out.println(flag);
}
}
这段代码判断了点击的到底是添加同一个监听器的不同按钮中的哪一个。
上述的这些监听器本质都是接口类,在使用时我们首先要创建一个类来实现这些接口,然后创建一个该类的对象,将其添加到需要监听的对象上即可完成监听。
public class DButtonlistener implements ActionListener,MouseListener{
private Graphics g;
private int x1,y1,x2,y2,flag;
public DButtonlistener(Graphics g)
{
this.g = g;
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="Oval")
{
flag = 1;
System.out.println(flag);
}
if(e.getActionCommand()=="Rectangle")
{
flag = 2;
System.out.println(flag);
}
}
public void mouseClicked(MouseEvent e) {
System.out.println(flag);
if(flag == 1)
{
x1 = e.getX();
y1 = e.getY();
g.drawOval(x1,y1,50,30);
}
if(flag == 2)
{
x2 = e.getX();
y2 = e.getY();
g.drawRect(x2,y2,40,30);
}
}
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
public class BoardFrame {
JButton oval = new JButton("oval");
JButton rect = new JButton("rect");
DButtonlistener dbl = new DButtonlistener(g);
Bframe.addMouseListener(dbl);
oval.addActionListener(dbl);
rect.addActionListener(dbl);
}
首先创建了一个 DButtonlistener类,让其实现动作监听器和鼠标监听器接口,在该类中重写接口方法。
然后用Swing对象自带的添加监听器的方法addMouseListener(MouseListener )和addActionListener(ActionListener )添加已经创建的实现了监听器接口的对象即可。