[引言]
我们在学习Java编程的时候,如果需要开发客户端窗体类型的程序,可以使用JDK中的awt和swing库。本文开始小博老师就继续为大家演示Java窗体编程中的各类监听器,今天主要讲解键盘监听器中的事件。
[步骤阅读一]键盘监听器事件列表
监听器的主要作用,是为窗体中的控件增加与用户行为之间的交互功能,使得整个窗体应用程序拥有活跃的元素,加强用户体验性。
其中常用监听器主要分为:鼠标监听器(MouseListener)、鼠标手势监听器(MouseMotionListener)、键盘监听器(KeyListener)、窗体监听器(WindowListener)、行为监听器(ActionListener)等顶层接口。
今天小博老师就为大家主要讲解键盘监听器(KeyListener),我们首先来了解一下键盘监听器可以与用户的哪些行为进行交互,它们均以接口中的方法来封装:
voidkeyTyped(KeyEvente):键盘按下监听事件
voidkeyReleased(KeyEvente):键盘释放监听事件
voidkeyPressed(KeyEvente):按键回显监听事件
这些方法均拥有一个形参(KeyEvent),该参数是键盘事件对象,其中包含了当前事件触发时,整个事件的各类数据信息,比如:触发事件的控件、触发事件的按键,当前功能键(Ctrl、Alt、Shift等)是否处于激活状态等等信息。
在键盘监听事件中,小博老师要额外提醒一下大家,当用户按一次键盘时,整个事件的传递顺序为:键盘按下、按键回显、按键释放,这么一个过程。其中键盘按下和按键回显事件时在回显效果之前被调用的,它们的区别是:无论用户按下的是回显键(如:A,K,8等)还是功能键(如Ctrl、Shift、Alt等)都会调用键盘按下事件,但是如果你只希望监听用户按下的回显键而对于功能键不需要监听,那就可以使用按键回显事件。最后,按键释放事件是在回显效果之后才会被调用的。
[步骤阅读二]键盘监听器的使用
接下来,小博老师通过一个简单的案例,让用户输入账户名称,即时校验账户名称是否合法(6-12位之间),让大家一起体验一下键盘监听器的使用方式,由于我们的需求是要知道用户当前输入的账户名称的长度,这个校验事件应该在回显效果之后调用,因此选择使用按键释放事件。核心代码如下:
publicclassMenuFrameextendsJFrame{
publicMenuFrame(){
super("博为峰教育");
setBounds(100, 20, 300, 200);
setLayout(null);
// 实例化 标签控件 用来提示用户输入账户名称
lbUname=newJLabel("账户名称:");
lbUname.setBounds(5, 5, 70, 25);
add(lbUname);
// 实例化 文本框控件 用来接收用户填写的账户名称
txtUname=newJTextField();
txtUname.setBounds(80, 5, 200, 25);
add(txtUname);
// 实例化 标签控件 用来验证用户填写的账户名称是否合法(6-12位之间)
lbUnameValidate=newJLabel();
lbUnameValidate.setBounds(80, 35, 200, 25);
add(lbUnameValidate);
// 给 文本框控件 注册 鼠标监听器 用来校验用户填写的账户名称是否合法
txtUname.addKeyListener(newKeyListener() {
// 键盘按下监听事件
publicvoidkeyTyped(KeyEvente) {}
// 键盘释放监听事件
publicvoidkeyReleased(KeyEvente) {
// 获取当前文本框控件中,账户名称的长度
intlen=txtUname.getText().length();
// 判断账户名称长度是否合法
if(len< 6 ){
lbUnameValidate.setText("账户名称最少6位!");
lbUnameValidate.setForeground(newColor(255,0,0));
}elseif(len> 12){
lbUnameValidate.setText("账户名称最多12位!");
lbUnameValidate.setForeground(newColor(255,0,0));
}else{
lbUnameValidate.setText("合法账户名称!");
lbUnameValidate.setForeground(newColor(0,255,0));
}
}
// 按键回显监听事件
publicvoidkeyPressed(KeyEvente) {}
});
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
privateJLabellbUname;
privateJTextFieldtxtUname;
privateJLabellbUnameValidate;
}
实例化窗体对象并且运行后,测试各类事件效果如下: