博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于KeyListener的简单使用
阅读量:4257 次
发布时间:2019-05-26

本文共 3250 字,大约阅读时间需要 10 分钟。

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。

KeyListener 是java 中的一个接口,用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象KeyAdapter 类(仅重写有用的方法)。然后使用组件的addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该KeyEvent 传递给它。

此接口有三个方法:

1. public void keyReleased(KeyEvent e)

释放某个键时调用此方法。

2.public void keyPressed(KeyEvent e)

按下某个键时调用此方法。

3.public void keyTyped(KeyEvent e)

键入某个键时调用此方法。

一、直接实现KeyListener接口的例子:

package com;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;public class MyFrame2 extends JFrame implements KeyListener {	/**	 * 实现KeyListener接口,要重写其所有方法,为事件源注册监听	 * 	 * @param args	 */	private static JPanel jp = new JPanel();	private int x;	private int y;	public MyFrame2(int x, int y) {		this.x = x;		this.y = y;		this.add(jp);		this.setSize(400, 300);		// 防止内存泄露		this.setDefaultCloseOperation(EXIT_ON_CLOSE);		this.setLocationRelativeTo(null);		this.setVisible(true);	}	public static void main(String[] args) {		MyFrame2 rb = new MyFrame2(100, 200);		// 前一个rt为事件源,后一个rt为监听者		rb.addKeyListener(rb);	}	public void paint(Graphics g) {		// 下面这句话不加就成了画笔了哦		// super.paint(g);		g.fillOval(this.x, this.y, 8, 8);	}	// ** 键入键执行的操作	@Override	public void keyTyped(KeyEvent e) {		JOptionPane.showMessageDialog(null, "你键入了一个键");	}	// ** 按下键执行的操作	@Override	public void keyPressed(KeyEvent e) {		if (e.getKeyCode() == KeyEvent.VK_DOWN) {			y++;		} else if (e.getKeyCode() == KeyEvent.VK_UP) {			y--;		} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {			x++;		} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {			x--;		}		this.repaint();	}	// ** 松开键执行的操作	@Override	public void keyReleased(KeyEvent e) {		JOptionPane.showMessageDialog(null, "你松开了键");	}}

二、扩展KeyAdapter类的例子:

package com;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class MyFrame1 extends JFrame {	JTextArea textArea = new JTextArea(6, 30);	JTextField textField = new JTextField(30);	JPanel panel = new JPanel();	JButton button = new JButton("发送");	public MyFrame1() {		super("聊天室");		this.setLayout(null);		this.setSize(500, 400);		this.setLocationRelativeTo(null);		this.setDefaultCloseOperation(3);		this.setResizable(false);		this.setVisible(true);		panel.setLayout(null);		panel.setBounds(0, 0, 500, 400);		panel.add(textField);		panel.add(button);		panel.add(textArea);		this.add(panel);		textArea.setBounds(0, 0, 500, 300);		textField.setBounds(50, 320, 150, 20);		button.setBounds(250, 320, 80, 20);		button.addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent arg0) {				textArea.append("月明风清说:" + textField.getText() + "\n");			}		});		// 添加键盘监听,扩展KeyAdapter类,只需重写自己需要的方法		textField.addKeyListener(new KeyAdapter() {			public void keyPressed(KeyEvent e) {				if (e.getKeyCode() == KeyEvent.VK_ENTER) {					textArea.append("月明风清说:" + textField.getText() + "\n");				}			}		});	}	public static void main(String[] args) {		new MyFrame1();	}}

 

转载地址:http://pvtei.baihongyu.com/

你可能感兴趣的文章
【Cmake】执行cmake命令时报错:No XSLT processor found
查看>>
【数据库】sqlite中PRAGMA命令说明
查看>>
【Qt】Qt容器总结
查看>>
【C++】C++11 STL算法(一):非修改序列操作(Non-modifying sequence operations)
查看>>
【C++】C++11 STL算法(二):修改序列的操作(Modifying sequence operations)
查看>>
【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
查看>>
【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
查看>>
【C++】C++11 STL算法(五):设置操作(Set operations)、堆操作(Heap operations)
查看>>
【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)
查看>>
【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
查看>>
【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
查看>>
【数据库】sqlite中的限制:数据库大小、表数、列数、行数、参数个数、连接数等
查看>>
【数据库】SQLite和MySQL之间的对比和选择
查看>>
【数据库】sqlite3数据库备份、导出方法汇总
查看>>
【数据库】适用于SQLite的SQL语句(一)
查看>>
【数据库】适用于SQLite的SQL语句(二)
查看>>
【数据库】适用于SQLite的SQL语句(三)
查看>>
【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
查看>>
【C++】C++11 STL算法(九):番外篇
查看>>
【C++】C++11 STL算法(十):使用STL实现排序算法
查看>>