java语法学习(12)GUI——事件处理

事件处理

事件处理机制
Swing 组件中的事件处理专门用于响应用户的操作,例如,响应用户的单击鼠标,按下键盘等操作。
在Swing事件处理过程中,主要涉及三类对象
1.事件源:事件发生的场所,通常就是产生事件的组件,例如窗口,按钮,菜单等。
2.事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作)
3.监听器:负责监听事件源上发生的事件,并对各种事件做出相应处理的对象

 e.g:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new GridLayout(3,3));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			JButton but1 = new JButton("1");
			but1.addActionListener(new MyListener());
			f.add(but1);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		class MyListener implements ActionListener{
			public void actionPerformed(ActionEvent e)
			{
				System.out.print("用户点击了按钮");
			}
		}
}

实现Swing事件处理的主要步骤如下:

  1. 创建事件源。除了一些常见的按钮,键盘等组件可以作为事件源,包括JFrame窗口在内的顶级容器也可以作为事件源
  2. 自定义事件监听器。根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的java类,必须实现相应的接口 如 WindowListener 用于监听窗口事件,ActionListener 用于监听动作事件
  3. 为事件注册监听器,使用addXxxListener()方法为指定事件源添加特定类型的监听器

Swing 常用事件处理

在Swing 中,提供了丰富的事件,这些事件大致可以分为窗体事件(WindowEvent),鼠标事件(MouseEvent)键盘事件(KeyEvvent),动作事件(ActionEvent)等

1.窗体事件

当对窗体进行操作时,例如窗体的打开,关闭,激活,停用等,这些动作都属于窗体事件,java中提供了一个WindowEvent类用于表示窗体事件。在应用程序中,当对窗体事件进行处理时。首先需要定义一个实现了WindowListener接口的类作为窗体监听器,然后通过addWindowListener()方法将窗体对象与窗体监听器进行绑定

e.g:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new GridLayout(3,3));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			f.addWindowListener(new MyWindowListener());
			JButton but1 = new JButton("1");
			but1.addActionListener(new MyListener());
			f.add(but1);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		class MyListener implements ActionListener{
			public void actionPerformed(ActionEvent e)
			{
				System.out.print("用户点击了按钮");
			}
		}
		class MyWindowListener implements WindowListener{
			public void windowOpened(WindowEvent e)
			{
				System.out.println("窗体打开");
			}
			public void windowIconified(WindowEvent e)
			{
				System.out.println("窗体独立化事件");
			}
			public void windowDeiconified(WindowEvent e)
			{
				System.out.println("窗体取消图标事件");
			}
			public void windowDeactivated(WindowEvent e)
			{
				System.out.println("窗体停用事件");
			}
			public void windowClosing(WindowEvent e)
			{
				System.out.println("窗体正在关闭");
			}
			public void windowClosed(WindowEvent e)
			{
				System.out.println("窗体关闭事件");
			}
			public void windowActivated(WindowEvent e)
			{
				System.out.println("窗体激活事件");
			}
		}
}

2.鼠标事件

java中提供了一个MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件。处理鼠标事件时,首先需要通过实现MouseListener接口定义监听器,也可以通过继承适配器MouseAdapter类来实现,然后调用addMouseListener()方法将监听器绑定到事件源对象。getClickCount()方法可以获得鼠标单击次数

e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new GridLayout(3,3));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			f.addWindowListener(new MyWindowListener());
			JButton but1 = new JButton("1");
			but1.addMouseListener(new MyMouse());
			f.add(but1);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		class MyListener implements ActionListener{
			public void actionPerformed(ActionEvent e)
			{
				System.out.print("用户点击了按钮");
			}
		}
		class MyWindowListener implements WindowListener{
			public void windowOpened(WindowEvent e)
			{
				System.out.println("窗体打开");
			}
			public void windowIconified(WindowEvent e)
			{
				System.out.println("窗体独立化事件");
			}
			public void windowDeiconified(WindowEvent e)
			{
				System.out.println("窗体取消图标事件");
			}
			public void windowDeactivated(WindowEvent e)
			{
				System.out.println("窗体停用事件");
			}
			public void windowClosing(WindowEvent e)
			{
				System.out.println("窗体正在关闭");
			}
			public void windowClosed(WindowEvent e)
			{
				System.out.println("窗体关闭事件");
			}
			public void windowActivated(WindowEvent e)
			{
				System.out.println("窗体激活事件");
			}
		}
		class MyMouse implements MouseListener
		{
			public void mouseReleased(MouseEvent e)
			{
				System.out.println("鼠标放开事件");
			}
			public void mousePressed(MouseEvent e)
			{
				System.out.println("鼠标按下事件");
			}
			public void mouseExited(MouseEvent e)
			{
				System.out.println("鼠标移出按钮区");
			}
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠标进入按钮区");
			}
			public void mouseClicked(MouseEvent e)
			{
				if(e.getButton() == MouseEvent.BUTTON1)
				{
					System.out.println("鼠标左击事件");
				}
				if(e.getButton() == MouseEvent.BUTTON3)
				{
					System.out.println("鼠标右击事件");
				}
				if(e.getButton() == MouseEvent.BUTTON2)
				{
					System.out.println("鼠标中击事件");
				}
			}
		}
}

3.键盘事件

java中提供了一个KeyEvent类表示键盘事件,处理KeyEvent事件的监听器对象需要实现KeyListener接口或者KeyAdapter类,然后调用addKeyListener()方法将监听器绑定到事件源对象

e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new GridLayout(3,3));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			f.addWindowListener(new MyWindowListener());
			JButton but1 = new JButton("1");
			but1.addMouseListener(new MyMouse());
			JTextField tf = new JTextField(30);
			tf.addKeyListener(new MyKeyAdapter());
			f.add(but1);
			f.add(tf);
			
			f.setVisible(true);
			
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		class MyListener implements ActionListener{
			public void actionPerformed(ActionEvent e)
			{
				System.out.print("用户点击了按钮");
			}
		}
		class MyWindowListener implements WindowListener{
			public void windowOpened(WindowEvent e)
			{
				System.out.println("窗体打开");
			}
			public void windowIconified(WindowEvent e)
			{
				System.out.println("窗体独立化事件");
			}
			public void windowDeiconified(WindowEvent e)
			{
				System.out.println("窗体取消图标事件");
			}
			public void windowDeactivated(WindowEvent e)
			{
				System.out.println("窗体停用事件");
			}
			public void windowClosing(WindowEvent e)
			{
				System.out.println("窗体正在关闭");
			}
			public void windowClosed(WindowEvent e)
			{
				System.out.println("窗体关闭事件");
			}
			public void windowActivated(WindowEvent e)
			{
				System.out.println("窗体激活事件");
			}
		}
		class MyMouse implements MouseListener
		{
			public void mouseReleased(MouseEvent e)
			{
				System.out.println("鼠标放开事件");
			}
			public void mousePressed(MouseEvent e)
			{
				System.out.println("鼠标按下事件");
			}
			public void mouseExited(MouseEvent e)
			{
				System.out.println("鼠标移出按钮区");
			}
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠标进入按钮区");
			}
			public void mouseClicked(MouseEvent e)
			{
				if(e.getButton() == MouseEvent.BUTTON1)
				{
					System.out.println("鼠标左击事件");
				}
				if(e.getButton() == MouseEvent.BUTTON3)
				{
					System.out.println("鼠标右击事件");
				}
				if(e.getButton() == MouseEvent.BUTTON2)
				{
					System.out.println("鼠标中击事件");
				}
			}
		}
		class MyKeyAdapter extends KeyAdapter{
			public void KeyPressed(KeyEvent e)
			{
				char keyChar = e.getKeyChar();
				int keyCode = e.getKeyCode();
				System.out.println("按下键盘的字符内容为"+ keyChar + " ");
				System.out.println("按下键盘的字符代码为:" +keyCode);
			}
		}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dearzcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值