文章目录
事件的类型和处理方法
概述
定义
当在某个组件上反生某些操作的时候,会自动的触发一些代码的执行
相关名词
事件源(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();
}
}
}