• JAVA学习第十课:java事件处理


    1、前提知识
    • 事件:Event
    • 什么是事件?程序对某种操作的响应
    • 使用的包:java.awt.event包
    2、如何处理事件?
    • 界面上有一个按钮,点击,控制台打印“Hello”
    • 事件响应对象必须能够监听到事件发出对象的命令
      • 按钮点击命令,由ActionListener监听
    • 事件响应对象必须能够响应事件
      • 按钮点击事件,由actionPerformed函数处理
    • 事件发出对象和事件响应对象绑定
      • 调用按钮的绑定函数:addActionListener
        总结:①实现监听接口;②编写处理函数;③绑定

    -举一反三:为什么Java的事件处理机制如此设计?
    - 案例:按钮点击,界面上打印“Hello”

    
    import javax.swing.*;
    import java.awt.event.*;
    class Printer implements ActionListener{  //①实现监听接口
    	public void actionPerformed(ActionEvent e){  //②编写处理函数
    		System.out.println("Hello");
    	}
    }
    
    class MyFrame extends JFrame{
    	private JButton jbt = new JButton("按钮");
    	private JPanel jpl = new JPanel();	
    	public MyFrame(){
    		this.add(jpl);
    		jpl.add(jbt);
    		jbt.addActionListener(new Printer());  //③绑定
    		this.setSize(300,400);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		new MyFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    3、需要注意的问题
    • 按钮点击命令,由ActionListener监听,Java底层设定
    • 各种事件,分别由什么Listener监听呢?后面一并总结
    • actionPerformed(ActionEvent e)
      • ActionEvent代表什么?封装了事件发出者的信息

           例:界面上两个按钮,点击,分别让界面改变不同颜色
        
        • 1
    package Test;
    
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    class MyFrame extends JFrame implements ActionListener{//①实现监听接口
    	private JButton jbt = new JButton("按钮");
    	private JPanel jpl = new JPanel();	
    	public MyFrame(){
    		this.add(jpl);
    		jpl.add(jbt);
    		jbt.addActionListener(this);  //③绑定
    		this.setSize(300,400);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}			
    	public void actionPerformed(ActionEvent e){  //②编写处理函数
    		jpl.setBackground(Color.yellow);
    	}
    	public static void main (String[] args) {
    		new MyFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    总结:①实现监听接口;②编写处理函数;③绑定
    ————以上叫做事件监听机制——————

    4、Java事件由对应的Listener监听
    • ***** ActionListener:按钮单击;文本框回车;菜单单击;其他拥有addActionListener函数的控件(见文档)

    • *AdjustmentListener:主要用于类似滚动条等调整功能的控件

    • *FocusListener:主要用于控件获得/失去焦点时响应事件

    • ***ItemListener:用于选项有变化时响应事件(如下拉菜单等)

      • 例:界面上一个下菜单,通过选择可以让界面变颜色
    • ****MouseListener:监听鼠标事件(点击,进入/退出控件区域等)

      • 鼠标进入界面,界面变颜色,退出,变为另一种颜色
    • ****MouseMotionListener:监听鼠标事件(移动拖动)

    • 鼠标在界面上移动,界面标题实时变为鼠标当前坐标值

    • ****KeyListener:监听键盘事件

       案例:一个按钮是黄色,另一个按钮是蓝色
      
      • 1
    package Test;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    class MyFrame extends JFrame implements ActionListener{//①实现监听接口
    	private JButton jbt1 = new JButton("按钮1");
    	private JButton jbt2 = new JButton("按钮2");
    	private JPanel jpl = new JPanel();	
    	public MyFrame(){
    		this.add(jpl);
    		jpl.add(jbt1);		jpl.add(jbt2);
    		jbt1.addActionListener(this);  //③绑定
    		jbt2.addActionListener(this);  
    		this.setSize(300,400);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}			
    	public void actionPerformed(ActionEvent e){  //②编写处理函数
    	    if(e.getSource()==jbt1){
    			jpl.setBackground(Color.yellow);
    	    }else{
    			jpl.setBackground(Color.blue);
    	    }
    	}
    	public static void main (String[] args) {
    		new MyFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    案例:可选列表换颜色
    
    • 1
    package Test;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    class MyFrame extends JFrame  implements ItemListener{
    	private JComboBox jcb = new JComboBox();
    	private JPanel jpl = new JPanel();	
    	public MyFrame(){
    		jcb.addItemListener(this);
    		this.add(jpl);
    		jpl.add(jcb);
    		jcb.addItem("红");
    		jcb.addItem("绿");
    		jcb.addItem("蓝");		
    		this.setSize(300,400);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}			
    	public void itemStateChanged(ItemEvent e){
    		String str = (String)jcb.getSelectedItem();
    		if(str.equals("红")){
    			jpl.setBackground(Color.red);
    		}else if(str.equals("绿")){
    			jpl.setBackground(Color.green);
    		}else{
    			jpl.setBackground(Color.blue);
    		}
    	}
    	public static void main (String[] args) {
    		new MyFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    案例:自动变色
    
    • 1
    package Test;
    
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    class MyFrame extends JFrame  implements MouseListener {
    	private JPanel jpl = new JPanel();	
    	public MyFrame(){
    		this.add(jpl);
    		this.addMouseListener(this);
    		this.setSize(300,400);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}			
    		
    	public void mouseClicked(MouseEvent e){}
    	public void mouseEntered(MouseEvent e) {
    		jpl.setBackground(Color.red);
    	}
    	public void mouseExited(MouseEvent e) {
    		jpl.setBackground(Color.blue);		
    	}
    	public void mousePressed(MouseEvent e){} 
    	public void mouseReleased(MouseEvent e){} 
    
    	public static void main (String[] args) {
    		new MyFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    总结:
    1、Java事件监听机制:三步骤
    ①实现监听接口;②编写处理函数;③绑定
    2、事件监听机制原理
    3、Java常见事件监听(举一反三)

  • 相关阅读:
    【C++】智能指针
    java毕业设计面向对象程序设计课程网站源码+lw文档+mybatis+系统+mysql数据库+调试
    【Python基础知识】(17)序列类型的相互转换
    flutter,javascript forEach await无效
    css中的盒模型box-sizing
    Linux C 基于tcp多线程在线聊天室
    python(48): 进程,线程 ,协程
    Android ImageView详解
    【ARM Coresight 系列文章19.2 -- Cortex-A720 AMU 详细介绍】
    获取所有非manager的员工emp_no
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/127657112