监听事件简介

在Swing中事件模型中由3个分离的对象完成对事件的处理,分别为事件源、事件以及监听器。事件源触发一个事件,他被一个或多个监听器接收,监听器负责处理事件。事件源(如按钮)会在用户做出相应动作(如按钮被按下)时产生事件对象,如动作事件对应ActionEvent类对象,同时要编写一个监听器的类必须实现相应的接口,如ActionEvent类对应的是ActionListener接口,需要获取某个事件对象就必须实现相应的接口,同时需要将接口中的方法一一实现。

动作事件监听器

  1. package MyPackage_2;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. public class TestClass extends JFrame{
  7. public TestClass(String str){
  8. super(str);
  9. super.setBounds(100,100,700,400);
  10. super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  11. Container c1=super.getContentPane();
  12. c1.setLayout(null);//设置为绝对布局
  13. JTextField j=new JTextField();
  14. j.setBounds(200,100,300,30);
  15. j.setFont(new Font("微软雅黑", Font.PLAIN,18));
  16. c1.add(j);
  17. JButton jb=new JButton("按钮");
  18. jb.setBounds(20,10,80,30);
  19. c1.add(jb);
  20. jb.addActionListener(new ActionListener() {
  21. @Override
  22. public void actionPerformed(ActionEvent e) {
  23. j.setText("您点击了按钮");
  24. }
  25. });
  26. JTextField jt=new JTextField();
  27. jt.setFont(new Font("微软雅黑",Font.PLAIN,18));
  28. jt.setBounds(150,10,150,30);
  29. c1.add(jt);
  30. jt.addActionListener(new ActionListener() {
  31. @Override
  32. public void actionPerformed(ActionEvent e) {
  33. j.setText("您在文本框输入了“"+jt.getText()+"”");
  34. }
  35. });
  36. JRadioButton jr1=new JRadioButton("A");
  37. JRadioButton jr2=new JRadioButton("B");
  38. jr1.setBounds(350,10,40,30);
  39. jr2.setBounds(400,10,40,30);
  40. c1.add(jr1);
  41. c1.add(jr2);
  42. ButtonGroup group=new ButtonGroup();
  43. group.add(jr1);
  44. group.add(jr2);
  45. jr1.addActionListener(new ActionListener() {
  46. @Override
  47. public void actionPerformed(ActionEvent e) {
  48. j.setText("您选择了A");
  49. }
  50. });
  51. jr2.addActionListener(new ActionListener() {
  52. @Override
  53. public void actionPerformed(ActionEvent e) {
  54. j.setText("您选择了B");
  55. }
  56. });
  57. String items[]={"学生证","身份证","工作证"};
  58. JComboBox<String> jc=new JComboBox<>(items);
  59. jc.setBounds(500,10,100,30);
  60. c1.add(jc);
  61. jc.addActionListener(new ActionListener() {
  62. @Override
  63. public void actionPerformed(ActionEvent e) {
  64. j.setText("您选择了"+jc.getSelectedItem());
  65. }
  66. });
  67. super.setVisible(true);//设置JF窗体可见
  68. }
  69. public static void main(String[] args) {
  70. TestClass d1=new TestClass("JF窗体");
  71. }
  72. }

运行结果:
image.pngimage.png
image.pngimage.png

焦点事件监听

  1. package MyPackage_2;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.FocusEvent;
  5. import java.awt.event.FocusListener;
  6. public class TestClass extends JFrame{
  7. public TestClass(String str){
  8. super(str);
  9. super.setBounds(100,100,700,400);
  10. super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  11. Container c1=super.getContentPane();
  12. c1.setLayout(null);//设置为绝对布局
  13. JTextField j1=new JTextField();
  14. JTextField j2=new JTextField();
  15. JTextField j3=new JTextField();
  16. j1.setBounds(10,10,100,30);
  17. j2.setBounds(10,50,100,30);
  18. j3.setBounds(10,90,100,30);
  19. c1.add(j1);
  20. c1.add(j2);
  21. c1.add(j3);
  22. class MyFocusListener implements FocusListener{//自定义焦点事件监听实现类
  23. @Override
  24. public void focusGained(FocusEvent e) {//获得焦点时执行的方法
  25. JTextField x=(JTextField) e.getSource();//获取被监听的组件,强制转化为文本框
  26. x.setBorder(BorderFactory.createLineBorder(Color.green));//获得焦点时边框变成绿色
  27. }
  28. @Override
  29. public void focusLost(FocusEvent e) {//失去焦点时执行的方法
  30. JTextField x=(JTextField) e.getSource();//获取被监听的组件,强制转化为文本框
  31. x.setBorder(BorderFactory.createLineBorder(Color.red));//失去焦点时边框变成红色
  32. }
  33. }
  34. /*也可以使用API提供的焦点监听实现类,但这样的话3个文本框都要写,比较麻烦*/
  35. j1.addFocusListener(new MyFocusListener());//使用自定义焦点监听实现类
  36. j2.addFocusListener(new MyFocusListener());//使用自定义焦点监听实现类
  37. j3.addFocusListener(new MyFocusListener());//使用自定义焦点监听实现类
  38. super.setVisible(true);//设置JF窗体可见
  39. }
  40. public static void main(String[] args) {
  41. TestClass d1=new TestClass("JF窗体");
  42. }
  43. }

运行结果:
image.png