一、监听事件简介
在Swing事件模型中由3个分离的对象完成对事件的处理,分别为事件源、事件以及监听程序。事件源触发一个事件,它被一个或多个“监听器”接收,监听器负责处理事件。
所谓事件监听器,实质上就是一个“实现特定类型监听器接口”的类对象。具体来说,事件几乎都以对象来表示,它是某种事件类的对象,事件源会在用户作出相应的动作时产生事件对象,如动作事件对应ActionListener接口,需要获取某个事件对象就必须实现相应的接口。
二、动作事件监听器
动作事件监听器是Swing中比较常用的事件监听器,很多组件的动作都会使用它监听
事件名称 | 事件源 | 监听接口 | 添加或删除相应类型监听器的方法 |
---|---|---|---|
ActionEvent | JButton、JList、JTextFiel等 | ActionListener | addActonListener()、removeActionListener() |
示例如下:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class SimpleTest extends JFrame{
private JButton jb = new JButton("这是一个按钮");
public SimpleTest() {
Container c = getContentPane();
setLayout(null);
setSize(100,100);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
c.add(jb);
jb.setBounds(10,10,100,30);
jb.addActionListener(new jbAction());
}
class jbAction implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
jb.setText("单击了按钮");
}
}
public static void main(String args[]) {
new SimpleTest();
}
}
上述示例运行结果如下:
三、焦点事件监听器
焦点事件监听器在实际开发中应用也比较广泛,如将光标焦点移开一个文本框时弹出一个对话框等
事件名称 | 事件源 | 监听接口 | 添加或删除相应类型监听器的方法 |
---|---|---|---|
FocusEvent | Component以及源生类 | FocusListener | addFocusListeneer()、removeFocusListener() |
示例如下:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class FocusEventTest extends JFrame{
public FocusEventTest() {
Container c =getContentPane();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
JTextField jt = new JTextField("请单击其他文本框",10);
JTextField jt2 = new JTextField("请单击这里",10);
c.add(jt);
c.add(jt2);
setLayout(new FlowLayout());
setSize(100,100);
setVisible(true);
jt.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// TODO 自动生成的方法存根
JOptionPane.showMessageDialog(null, "文本框失去焦点");
}
@Override
public void focusGained(FocusEvent e) {
// TODO 自动生成的方法存根
}
});
}
public static void main(String args[]) {
new FocusEventTest();
}
}
上述示例运行结果如下: