第二十八次

事件的类型和处理方法

概述

定义

当在某个组件上反生某些操作的时候,会自动的触发一些代码的执行

相关名词

事件源(Event Source):操作发生的场所,通常指某个组件,例如按钮、窗口等
事件(Event):该事件源上发生的操作可以叫做事件,如点击,滑动等,GUI会把事件封装到一个Event对象中,如果需要该事件的详细信息,就可以通过Event对象来获取
事件监听器(Event Listener):当在某个事件源上发生了某个事件,事件监听器就可以对这个事件进行处理
注册监听:把事件监听器通过某个事件绑定到某个事件源上,当该事件源发生了该事件,那么监听器的代码会自动执行

处理机制流程图

在这里插入图片描述

基本使用步骤

创建事件源组件对象
自定义类,实现XxxListener接口,重写方法
创建事件监听器对象(自定义类对象)
调用事件源组件对象的addXxxListener方法来完成注册监听

GUI中常见事件和事件监听器

事件监听器必须实现事件监听器接口,AWT提供了大量的事件监听器接口用于实现不同类型的事件监听器,用于监听不同类型的事件。AWT中提供了丰富的事件类,用于封装不同组件上所发生的特定操作,AWT的事件类都是AWTEvent的子类,AWTEvent是EventObject的子类。

低级事件

这类事件是基于某个特定的动作的事件。比如进入、点击、拖放等动作的鼠标事件,再比如得到焦点和失去焦点的焦点事件
在这里插入图片描述

高级事件

这类事件并不会基于某个特定动作,而是根据功能含义定义的动作
在这里插入图片描述

事件监听器

不同的事件需要使用不同的监听器监听,不同的监听器需要实现不同的监听器接口,当指定事件发生后,事件监听器就会调用所包含的事件处理器(实例方法)来处理事件。
在这里插入图片描述
##键盘事件处理
键盘事件在用户按下键盘上的键时发生,可分为两类。
第一类是KeyPress事件,当按下的键表示的是一个ASCII 字符时就会触发这类事件,可通过它的 KeyPressEventArgs 类型参数的属性 KeyChar 来确定按下键的 ASCII 码。
使用 KeyPress 事件无法判断是否按下了修改键(例如 Shift,Alt 和 Ctrl 键),为了判断这些动作, 就要处理KeyUp 或KeyDown事件, 这些事件组成了第二类键盘事件。 该类事件有一个KeyEventArgs类型的参数,通过该参数可以测试是否按下了一些修改键、功能键等特殊按键信息。
KeyPressEventArgs类的主要属性(KeyPress事件的一个参数类型):
Handled属性:用来获取或设置一个值,该值指示是否处理过KeyPress事件;
KeyChar属性:用来获取按下的键对应的字符,通常是该键的ASCII码;
KeyEventArgs类的主要属性(KeyUp和KeyDown事件的一个参数):
Alt属性:用来获取一个值,该值指示是否曾按下Alt键;
Control属性:用来获取一个值,该值指示是否曾按下Ctrl键;
Shift属性:用来获取一个值,该值指示是否曾按下Shift键;
Handled属性:用来获取或设置一个值,该值指示是否处理过此事件;
KeyCode属性:以 Keys枚举型值返回键盘键的键码,该属性不包含修改键(Alt、Control和 Shift键)信息,用于测试指定的键盘键;
KeyData 属性:以 Keys 枚举类型值返回键盘键的键码,并包含修改键信息,用于判断关于按下键盘键的所有信息;
KeyValue属性:以整数形式返回键码,而不是Keys枚举类型值。用于获得所按下键盘键的数字表示;
Modifiers 属性:以 Keys 枚举类型值返回所有按下的修改键(Alt、Control 和 Shift 键),仅用于判断修改键信息。

鼠标事件处理

对鼠标操作的处理是应用程序的重要功能之一,在VisualC#中有一些与鼠标操作相关的事件,利用它们可以方便地进行与鼠标有关的编程
MouseEnter事件:在鼠标指针进入控件时发生;
MouseMove事件:在鼠标指针移到控件上时发生。事件处理程序接收一个MouseEventArgs类型的参数,该参数包含与此事件相关的数据。该参数的主要属性及其含义如下:
Button属性:用来获取曾按下的是哪个鼠标按钮。该属性是MouseButtons枚举型的值, 取值及含义如下:
Left(按下鼠标左按钮)
Middle(按下鼠标中按钮)
Right(鼠标右按钮)
None(没有按下鼠标按钮)
XButton1 (按下了第一个XButton按钮, 仅用于Microsoft智能鼠标浏览器)
XButton2(按下了第二个XButton按钮,仅用于 Microsoft智能鼠标浏览器)
Clicks属性:用来获取按下并释放鼠标按钮的次数;
Delta属性:用来获取鼠标轮已转动的制动器数的有符号计数。制动器是鼠标轮的一个凹口;
X 属性:用来获取鼠标所在位置的x坐标;
Y 属性:用来获取鼠标所在位置的y坐标;
MouseHover事件:当鼠标指针悬停在控件上时将发生该事件;
MouseDown事件:当鼠标指针位于控件上并按下鼠标键时将发生该事件。事件处理程序也接收一个MouseEventArgs类型的参数;
MouseUp 事件:当鼠标指针在控件上并释放鼠标键时将发生该事件。事件处理程序也接收一个MouseEventArgs类型的参数;
MouseWheel事件:在移动鼠标轮并且控件有焦点时将发生该事件。该事件的事件处理程序接收一个MouseEventArgs类型的参数;
MouseLeave事件:在鼠标指针离开控件时将发生该事件。

代码及成果展示

demo01

package Demo01;

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class TestTextDemo01 extends JFrame {
	public TestTextDemo01() {
		Container container=this.getContentPane();
		JTextField textfield=new JTextField("Hello world");
		JTextField textfield2=new JTextField("大数据五班");
		container.add(textfield,BorderLayout.NORTH);
		container.add(textfield2,BorderLayout.SOUTH);
		this.setVisible(true);
		this.setSize(500, 350);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new TestTextDemo01();
		
	}

}
package Demo01;

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class TestTextDemo2 extends JFrame {
	public TestTextDemo2() {
		Container container=this.getContentPane();
		JPasswordField passwordField=new JPasswordField();
		passwordField.setEchoChar('$');
		container.add(passwordField);
		this.setVisible(true);
		this.setSize(500, 350);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new TestTextDemo2();
		
	}

}

在这里插入图片描述
在这里插入图片描述

demo02

package Demo02;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class TextActionEvent {
	public static void main(String[] args) {
		JFrame frame =new JFrame();
		frame.setSize(500, 400);
		frame.locate(400, 200);
		
		MyActionListener MyActionListener=new MyActionListener();
		Button button=new Button();
		
		button.addActionListener(MyActionListener);
		frame.add(button,BorderLayout.CENTER);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		
	}

}
class MyActionListener implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("大数据五班");
		
	}
	
}
package Demo02;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class TextActionTwo {
	public static void main(String[] args) {
		JFrame frame =new JFrame("开始--停止");
		frame.setSize(500, 400);
		frame.locate(400, 200);
		Button button1=new Button("start");
		Button button2=new Button("stop");
		
		MyMonit0r myMonit0r =new MyMonit0r();
		
		button1.addActionListener(myMonit0r);
		button2.addActionListener(myMonit0r);
		frame.add(button1,BorderLayout.CENTER);
		frame.add(button2,BorderLayout.SOUTH);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
	}

}
class MyMonit0r implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		//System.out.println("大数据五班->"+e.getActionCommand());
		if(e.getActionCommand().equals("stop")) {
			System.out.println("我要下班了");
		}else {
			System.out.println("我要开始工作了");
			
		}
	}
	
}
package Demo02;

import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class TextText01 {
	public static void main(String[] args) {
		new MyFrame();
	}
	
}
class MyFrame extends JFrame{
	public MyFrame() {
		TextField textFileld=new TextField();
		this.add(textFileld);
		MyActionListener2 myActionListener2 =new MyActionListener2();
		textFileld.addActionListener(myActionListener2);
		textFileld.setEchoChar('&');
		this.setVisible(true);
		this.pack();
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}
class MyActionListener2 implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		TextField field=(TextField)e.getSource();
		System.out.println(field.getText());
		field.setText("");
	}
	
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

demo03

package Demo03;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class TestKeyListener {
	public static void main(String[] args) {
		new KeyFrame();
	}

}
class KeyFrame extends JFrame{
	public KeyFrame() {
		this.setBounds(10, 20, 300, 400);
		this.setVisible(true);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.addKeyListener(
				new KeyAdapter() {
					@Override
					public void keyPressed(KeyEvent e) {
						int keycode=e.getKeyCode();
						System.out.println(keycode);
						if(keycode==KeyEvent.VK_UP) {
							System.out.println("您按下了  上键");
						}if(keycode==KeyEvent.VK_W) {
							System.out.println("您按下了  w上键");
						}
					}
			
		});
	}
}
package Demo03;

import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class TestWindow {
	public static void main(String[] args) {
		new WindowFrame();
	}

}
class WindowFrame extends JFrame{
	public WindowFrame() {
		this.setBackground(Color.cyan);
		this.setBounds(166, 200, 300, 400);
		this.setVisible(true);
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		//this.addWindowListener(new MyWindowListener());//匿名类
		
		this.addWindowListener(
				new WindowAdapter() {
					//匿名内部类
					@Override
					public void windowClosing(WindowEvent e) {
						// TODO 自动生成的方法存根
						super.windowClosing(e);
						setVisible(false);//设置不可见
						System.out.println("我要关闭");
						//System.exit(0);
					}
					@Override
					public void windowActivated(WindowEvent e) {
						// TODO 自动生成的方法存根
						super.windowActivated(e);
					System.out.println("windowActivated");
				}
					@Override
					public void windowClosed(WindowEvent e) {
						// TODO 自动生成的方法存根
						super.windowClosed(e);
					System.out.println("windowClosed");
					}
					@Override
					public void windowOpened(WindowEvent e) {
						// TODO 自动生成的方法存根
						super.windowOpened(e);
					System.out.println("windowOpened");
					}
					
				}
		
		);
	}
}

	/*
	class MyWindowListener extends WindowAdapter{
		//  按住alt+/
		@Override
		public void windowClosing(WindowEvent e) {
			// TODO 自动生成的方法存根
			super.windowClosing(e);
			setVisible(false);//设置不可见
			System.out.println("我要关闭");
			System.exit(0);
}
	}*/
package Demo03;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.text.html.HTMLDocument.Iterator;

public class TextMouseListener {
	public static void main(String[] args) {
		new MyFrame("我的画图");
	}

}
class MyFrame extends JFrame{
	ArrayList points;
	public MyFrame(String title) {
		super(title);
		this.setBounds(400, 400, 400, 400);
		this.setVisible(true);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		points=new ArrayList<>();
		this.addMouseListener(new MyMouseListener());
	}
	public void paint(Graphics g) {
		java.util.Iterator iterator=points.iterator();
		while(iterator.hasNext()) {
			Point point=(Point)iterator.next();
			g.setColor(Color.cyan);
			g.fillOval(point.x, point.y, 10, 20);
		}
	}
	public void addPaint(Point point) {
		points.add(point);
	}
	private class MyMouseListener extends MouseAdapter{
		@Override
		public void mousePressed(MouseEvent e) {
			MyFrame myFrame=(MyFrame)e.getSource();
			System.out.println("x坐标:"+e.getX()+"y坐标:"+e.getY());
			myFrame.addPaint(new Point(e.getX(),e.getY()));
			myFrame.repaint();
		}
		
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2020080605045 袁雪华 大数据2005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值