Swing程序设计(五)——常用事件监听

常用事件监听

事件名称监听接口类型
KeyEventKeyListener键盘
MouseEventMouseListener鼠标
WindowEventWindowListener窗体
ActionEventActionListener动作
FocusEventFocusListener焦点

1.键盘事件监听

  • KeyListener接口(键盘事件监听接口)
触发动作处理方法
发生击键事件时被触发void keyTyped(KeyEvent e)
按键被按下时触发void keyPressed(KeyEvent e)
按键被释放时触发void keyReleased(KeyEvent e)
  • KeyEvent(键盘事件类)
常用方法说明
public Object getSource()用来获得触发此次事件的组件对象,返回值为Object类型
public char getKeyChar()返回与此事件中的键相关联的字符。(可区分大小写)
public int getKeyCode()返回与此事件中的键相关联的整数 keyCode。即VK_XXX
public static String getKeyText(int keyCode)返回描述 keyCode 的标签,如“HOME”、“F1”或“A”。(大写)
public boolean isActionKey()返回此事件中的键是否为“动作”键。通常动作键不会激发 unicode 字符并且不是组合键。
public boolean isControlDown()用来查看Ctrl键在此次事件中是否被按下,当返回true时表示被按下
public boolean isAltDown()用来查看Alt键在此次事件中是否被按下,当返回true
public boolean isShiftDown()用来查看Shift键在此次事件中是否被按下,当返回true

注意:在KeyEvent类中以"VK_"开头的静态常量代表各个按键的keyCode,可以通过这些静态常量判断事件中的按键,获得按键的标签。

示例:
public class KeyEvent_Example extends JFrame { // 继承窗体类JFrame
	private static final long serialVersionUID = 1L;

	public static void main(String args[]) {
		KeyEvent_Example frame = new KeyEvent_Example();
		frame.setVisible(true); // 设置窗体可见,默认为不可见
	}
	
	public KeyEvent_Example() {
		super(); // 继承父类的构造方法
		setTitle("键盘事件示例"); // 设置窗体的标题
		setBounds(100, 100, 500, 375); // 设置窗体的显示位置及大小
		// 设置窗体关闭按钮的动作为退出
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JLabel label = new JLabel();
		label.setText("备注:");
		getContentPane().add(label, BorderLayout.WEST);
		final JScrollPane scrollPane = new JScrollPane();
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		JTextArea textArea = new JTextArea();
		textArea.addKeyListener(new KeyListener() {
			public void keyPressed(KeyEvent e) { // 按键被按下时被触发
				// 获得描述keyCode的标签
				String keyText = KeyEvent.getKeyText(e.getKeyCode());
				if (e.isActionKey()) { // 判断按下的是否为动作键
					System.out.println("您按下的是动作键“" + keyText + "”");
				} else {
					System.out.print("您按下的是非动作键“" + keyText + "”");
					// 获得与此事件中的键相关联的字符
					int keyCode = e.getKeyCode();
					switch (keyCode) {
						case KeyEvent.VK_CONTROL: // 判断按下的是否为Ctrl键
							System.out.print(",Ctrl键被按下");
							break;
						case KeyEvent.VK_ALT: // 判断按下的是否为Alt键
							System.out.print(",Alt键被按下");
							break;
						case KeyEvent.VK_SHIFT: // 判断按下的是否为Shift键
							System.out.print(",Shift键被按下");
							break;
					}
					System.out.println();
				}
			}
			public void keyTyped(KeyEvent e) { // 发生击键事件时被触发
				// 获得输入的字符
				System.out.println("此次输入的是“" + e.getKeyChar() + "”");
			}
			public void keyReleased(KeyEvent e) { // 按键被释放时被触发
				// 获得描述keyCode的标签
				String keyText = KeyEvent.getKeyText(e.getKeyCode());
				System.out.println("您释放的是“" + keyText + "”键");
				System.out.println();
			}
		});
		textArea.setLineWrap(true);
		textArea.setRows(3);
		textArea.setColumns(15);
		scrollPane.setViewportView(textArea);
	}
}

2.鼠标事件监听
所有组件都能发生鼠标事件

  • MouseListener(鼠标事件监听接口)
触发动作处理方法
光标移入组件时被触发void mouseEntered(MouseEvent e)
光标移出组件时被触发void mouseExited(MouseEvent e)
鼠标按键被按下时被触发void mousePressed(MouseEvent e)
鼠标按键被释放时被触发void mouseReleased(MouseEvent e)
发生单击事件时被触发void mouseClicked(MouseEvent e)

注意:所谓单击事件,就是按键被按下并释放。要注意的是,如果按键是在移出组件后才被释放,则不会触发单击事件。

  • MouseEvent(鼠标事件)
    负责捕获鼠标事件,可通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件。
常用方法说明
public Object getSource()用来获得触发此次事件的组件对象,返回值为Object类型
public int getButton()用来获得代表触发此次按下、释放、或点击事件的按键的int型值
public int getClickCount()返回与此事件关联的鼠标单击次数。
public int getX()返回事件相对于源组件的水平 x 坐标。
public int getY()返回事件相对于源组件的垂直 y 坐标。
public Point getPoint()返回事件相对于源组件的 x、y 位置。
public boolean isPopupTrigger()返回此鼠标事件是否为该平台的弹出式菜单触发事件。
代表鼠标按键的静态常量常量值代表的键
BUTTON11代表鼠标左键
BUTTON22代表鼠标滚轮
BUTTON33代表鼠标右键
示例:
label.addMouseListener(new MouseListener() {
			public void mouseEntered(MouseEvent e) {// 光标移入组件时被触发
				System.out.println("光标移入组件");
			}
			
			public void mousePressed(MouseEvent e) {// 鼠标按键被按下时被触发
				System.out.print("鼠标按键被按下,");
				int i = e.getButton(); // 通过该值可以判断按下的是哪个键
				if (i == MouseEvent.BUTTON1)
					System.out.println("按下的是鼠标左键");
				if (i == MouseEvent.BUTTON2)
					System.out.println("按下的是鼠标滚轮");
				if (i == MouseEvent.BUTTON3)
					System.out.println("按下的是鼠标右键");
			}
			
			public void mouseReleased(MouseEvent e) {// 鼠标按键被释放时被触发
				System.out.print("鼠标按键被释放,");
				int i = e.getButton(); // 通过该值可以判断释放的是哪个键
				if (i == MouseEvent.BUTTON1)
					System.out.println("释放的是鼠标左键");
				if (i == MouseEvent.BUTTON2)
					System.out.println("释放的是鼠标滚轮");
				if (i == MouseEvent.BUTTON3)
					System.out.println("释放的是鼠标右键");
			}
			
			public void mouseClicked(MouseEvent e) {// 发生单击事件时被触发
				System.out.print("单击了鼠标按键,");
				int i = e.getButton(); // 通过该值可以判断单击的是哪个键
				if (i == MouseEvent.BUTTON1)
					System.out.print("单击的是鼠标左键,");
				if (i == MouseEvent.BUTTON2)
					System.out.print("单击的是鼠标滚轮,");
				if (i == MouseEvent.BUTTON3)
					System.out.print("单击的是鼠标右键,");
				int clickCount = e.getClickCount();
				System.out.println("单击次数为" + clickCount + "下");
			}
			
			public void mouseExited(MouseEvent e) {// 光标移出组件时被触发
				System.out.println("光标移出组件");
			}
		});

3.窗体事件监听

  • WindowFocusListener(窗体焦点监听接口)
触发动作处理方法
窗体获得焦点时被触发void windowGainedFocus(WindowEvent e)
窗体失去焦点时被触发void windowLostFocus(WindowEvent e)
示例:
public class WindowFocusListener_Example extends JFrame {
	private static final long serialVersionUID = 1L;
	public static void main(String args[]) {
		WindowFocusListener_Example frame = new WindowFocusListener_Example();
		frame.setVisible(true);
	}
	public WindowFocusListener_Example() {
		super();
		// 为窗体添加焦点事件监听器
		addWindowFocusListener(new MyWindowFocusListener());
		setTitle("捕获窗体焦点事件");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	private class MyWindowFocusListener implements WindowFocusListener {
		public void windowGainedFocus(WindowEvent e) {// 窗口获得焦点时被触发
			System.out.println("窗口获得了焦点!");
		}
		public void windowLostFocus(WindowEvent e) {// 窗口失去焦点时被触发
			System.out.println("窗口失去了焦点!");
		}
	}
}

  • WindowStateListener(窗体状态监听接口)
触发动作处理方法
窗体状态发生变化时被触发(最大化、最小化、正常之间的转换)void windowStateChanged(WindowEvent e)
示例:
public class WindowStateListener_Example extends JFrame {
	private static final long serialVersionUID = 1L;
	public static void main(String args[]) {
		WindowStateListener_Example frame = new WindowStateListener_Example();
		frame.setVisible(true);
	}
	public WindowStateListener_Example() {
		super();
		// 为窗体添加状态事件监听器
		addWindowStateListener(new MyWindowStateListener());
		setTitle("捕获窗体状态事件");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	private class MyWindowStateListener implements WindowStateListener {
		public void windowStateChanged(WindowEvent e) {
			int oldState = e.getOldState();// 获得窗体以前的状态
			int newState = e.getNewState();// 获得窗体现在的状态
			String from = "";// 标识窗体以前状态的中文字符串
			String to = "";// 标识窗体现在状态的中文字符串
			switch (oldState) {// 判断窗台以前的状态
				case Frame.NORMAL:// 窗体处于正常化
					from = "正常化";
					break;
				case Frame.MAXIMIZED_BOTH:// 窗体处于最大化
					from = "最大化";
					break;
				default:// 窗体处于最小化
					from = "最小化";
			}
			switch (newState) {// 判断窗台现在的状态
				case Frame.NORMAL:// 窗体处于正常化
					to = "正常化";
					break;
				case Frame.MAXIMIZED_BOTH:// 窗体处于最大化
					to = "最大化";
					break;
				default:// 窗体处于最小化
					to = "最小化";
			}
			System.out.println(from + "——>" + to);
		}
	}
}

  • WindowListener(窗体事件监听接口)
触发动作处理方法
窗体被激活时触发,可认为获得焦点void windowActivated(WindowEvent e)
窗口被打开时触发,即窗口首次变为可见时调用。void windowOpened(WindowEvent e)
窗口最小化时触发void windowIconified(WindowEvent e)
窗口被非最小化时触发,即窗口从最小化状态变回状态时调用。void windowDeiconified(WindowEvent e)
窗体将要被关闭时触发void windowClosing(WindowEvent e)
窗体不再处于激活状态时触发void windowDeactivated(WindowEvent e)
因对窗口调用 dispose 而将其关闭时调用。(通常用于释放资源)void windowClosed(WindowEvent e)

注意:先激活后打开,先失去激活后关闭


  • WindowEvent(窗体事件)
常用方法说明
public int getOldState()获得窗体以前的状态。
public int getNewState()获得窗体现在的状态。

注意:返回窗体状态为int型值,可以通过Frame类中的静态常量判断返回的int型值具体代表什么状态。Frame类代表窗体状态静态常量如下:

静态常量常量值说明
NORMAL0代表窗体处于“正常化”状态
ICONIFIED1代表窗体处于“最小化”状态
MAXIMIZED6代表窗体处于“最大化”状态

4.选项事件监听

  • ItemListener接口(选项事件监听接口)
事件源触发动作处理方法
下拉列表框、单选框、复选框等在用户已选定或取消选定某项时触发void itemStateChanged(ItemEvent e)

注意:在修改下拉列表选中项的过程中该方法会触发两次,一次由取消原来选中项的选中状态触发,另一次是由选中新选项触发的。选中项未发生变化时,不会触发选项事件,如选项2改为选项2时。


  • ItemEvent类(选项事件类)
常用方法说明
public Object getItem()用来获得触发此次事件的选项,返回值为Object型
public int getStateChange()用来获得此次事件的类型,即是由取消原来选中项的选中状态触发的,还是由选中新选项触发的。
静态常量说明
SELECTED选中新选项
DESELECTED取消原来选中项的选中状态

5.表格模型事件监听

  • TableModelListener接口(表格模型监听接口)
事件源触发动作处理方法
表格模型表格模型添加、修改、删除行时触发void tableChanged(TableModelEvent e)
  • TableModelEvent类(表格模型事件)
常用方法说明
public int getFirstRow()返回更改的第一行索引。
public int getLastRow()返回更改的最后一行索引。
public int getColumn()返回触发事件列的索引。 如果返回值为ALL_COLUMNS; 这意味着指定行中的每一列都被更改。
public int getType()返回事件的类型,返回类型为整数值常量,包括:INSERT(插入事件),UPDATE(修改事件)和DELETE(删除事件)。
静态常量说明
INSERT插入事件
UPDATE修改事件
DELETE删除事件

6.动作事件监听

事件源触发动作事件名称监听接口处理方法
按钮组件点击ActionEventActionListeneractionPerformed
列表组件选择值ActionEventActionListeneractionPerformed
文本组件回车键ActionEventActionListeneractionPerformed

注:处理方法中public void actionPerformed(ActionEvent e)中可以使用方法getSource()获取Object类型事件源,需要强制转换为组件类型。如:

Object a = e.getSource();
JButton b = (JButton) a;

还有一般使用匿名内部类形式为事件源做监听事件。

添加或删除相应类型监听器的方法:
addActionListener() 注册监听器
removeActionListener() 删除监听器

7.焦点事件监听

事件源触发动作事件名称监听接口
Component以及派生类1.获得焦点
2.失去焦点
ActionEventActionListener
处理方法说明
public void focusGained(FocusEvent e)获得焦点时调用
public void focusLost(FocusEvent e)失去焦点时调用

添加或删除相应类型监听器的方法:
addFocusListener() 注册监听器
removeFocusListener() 删除监听器


8.其他事件监听


(1).处理树组件展开节点事件
TreeWillExpandListener接口和TreeExpansionEvent
TreeExpansionListener接口和TreeExpansionEvent

监听接口事件名称描述
TreeWillExpandListenerTreeExpansionEvent当展开和折叠树节点时,将发出TreeExpansionEvent事件,通过实现TreeWillExpandListener接口可以在树节点展开和折叠之前捕获该事件。
TreeExpansionListenerTreeExpansionEvent通过实现TreeExpansionListener接口可以在树节点展开和折叠时捕获该事件

监听接口方法及说明:
1.TreeWillExpandListener接口:
可用于需要验证用户权限,如果用户没有权限查看该节点包含的子节点,则不允许树节点展开。

方法触发
void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException每当树中的一个节点将被扩展时调用。
void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException每当树中的一个节点将被折叠时调用。

2.TreeExpansionListener接口:

方法触发
void treeExpanded(TreeExpansionEvent event)每当树中的一个项被扩展时调用。
void treeCollapsed(TreeExpansionEvent event)每当树中的一个项被折叠时调用。

3.TreeExpansionEvent

常用方法说明
public TreePath getPath()返回到达已被扩展/折叠的值的路径。

(2)ChangeListener接口(可用于选项卡选中状态改变的监听)

方法触发
void stateChanged(ChangeEvent e)当侦听器的目标已更改其状态时调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值