小博老师解析Java核心技术 ——JSwing键盘监听事件

来源:互联网 发布:股城模拟炒股软件 编辑:程序博客网 时间:2024/05/22 00:43

[引言]

我们在学习Java编程的时候,如果需要开发客户端窗体类型的程序,可以使用JDK中的awt和swing库。本文开始小博老师就继续为大家演示Java窗体编程中的各类监听器,今天主要讲解键盘监听器中的事件。

 

[步骤阅读一]键盘监听器事件列表

监听器的主要作用,是为窗体中的控件增加与用户行为之间的交互功能,使得整个窗体应用程序拥有活跃的元素,加强用户体验性。

其中常用监听器主要分为:鼠标监听器(MouseListener)、鼠标手势监听器(MouseMotionListener)、键盘监听器(KeyListener)、窗体监听器(WindowListener)、行为监听器(ActionListener)等顶层接口。

今天小博老师就为大家主要讲解键盘监听器(KeyListener),我们首先来了解一下键盘监听器可以与用户的哪些行为进行交互,它们均以接口中的方法来封装:

void keyTyped(KeyEvent e)键盘按下监听事件

void keyReleased(KeyEvent e)键盘释放监听事件

void keyPressed(KeyEvent e):按键回显监听事件

这些方法均拥有一个形参(KeyEvent),该参数是键盘事件对象,其中包含了当前事件触发时,整个事件的各类数据信息,比如:触发事件的控件、触发事件的按键,当前功能键(Ctrl、Alt、Shift等)是否处于激活状态等等信息。

在键盘监听事件中,小博老师要额外提醒一下大家,当用户按一次键盘时,整个事件的传递顺序为:键盘按下、按键回显、按键释放,这么一个过程。其中键盘按下和按键回显事件时在回显效果之前被调用的,它们的区别是:无论用户按下的是回显键(如:A,K,8等)还是功能键(如Ctrl、Shift、Alt等)都会调用键盘按下事件,但是如果你只希望监听用户按下的回显键而对于功能键不需要监听,那就可以使用按键回显事件。最后,按键释放事件是在回显效果之后才会被调用的。

 

[步骤阅读二]键盘监听器的使用

接下来,小博老师通过一个简单的案例,让用户输入账户名称,即时校验账户名称是否合法(6-12位之间),让大家一起体验一下键盘监听器的使用方式,由于我们的需求是要知道用户当前输入的账户名称的长度,这个校验事件应该在回显效果之后调用,因此选择使用按键释放事件。核心代码如下:

public class MenuFrame extends JFrame{

public MenuFrame(){

super("博为峰教育");

setBounds(100, 20, 300, 200);

setLayout(null);

// 实例化 标签控件 用来提示用户输入账户名称

lbUname = new JLabel("账户名称:");

lbUname.setBounds(5, 5, 70, 25);

add(lbUname);

// 实例化 文本框控件 用来接收用户填写的账户名称

txtUname = new JTextField();

txtUname.setBounds(80, 5, 200, 25);

add(txtUname);

// 实例化 标签控件 用来验证用户填写的账户名称是否合法(6-12位之间)

lbUnameValidate = new JLabel();

lbUnameValidate.setBounds(80, 35, 200, 25);

add(lbUnameValidate);

// 给 文本框控件 注册 鼠标监听器 用来校验用户填写的账户名称是否合法

txtUname.addKeyListener(new KeyListener() {

// 键盘按下监听事件

public void keyTyped(KeyEvent e) {}

// 键盘释放监听事件

public void keyReleased(KeyEvent e) {

// 获取当前文本框控件中,账户名称的长度

int len = txtUname.getText().length();

// 判断账户名称长度是否合法

iflen < 6 ){

lbUnameValidate.setText("账户名称最少6位!");

lbUnameValidate.setForeground(new Color(255,0,0));

}else if(len > 12){

lbUnameValidate.setText("账户名称最多12位!");

lbUnameValidate.setForeground(new Color(255,0,0));

}else{

lbUnameValidate.setText("合法账户名称!");

lbUnameValidate.setForeground(new Color(0,255,0));

}

}

// 按键回显监听事件

public void keyPressed(KeyEvent e) {}

});

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private JLabel lbUname;

private JTextField txtUname;

private JLabel lbUnameValidate;

}

实例化窗体对象并且运行后,测试各类事件效果如下:


0 0
原创粉丝点击