您的位置:首页 > 产品设计 > UI/UE

25-GUI-06-GUI(键盘事件)

2015-08-11 16:48 381 查看
package demo;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class KeyListenerDemo {

private Frame f;
private TextField tf;
private Button but;

public KeyListenerDemo(){

init();

}

private void init() {

f = new Frame("演示键盘监听");
f.setBounds(200, 100, 500, 400);
f.setLayout(new FlowLayout());

but = new Button("一个按钮");
f.add(but);

tf = new TextField(15);
f.add(tf);

myEvent();

f.setVisible(true);

}

private void myEvent() {

f.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {

System.exit(0);
}

});

//给文本框添加键盘监听
/*
* 【添加监听器的思考步骤】
* 1.确定事件源
* 2.确定事件监听器(鼠标、动作还是键盘)
* 3.确定用什么动作监听(如单击鼠标、双击鼠标等等)
*
* 【注意】除了action等两三个外,监听器一般具备适配器Adapter
*/

/*
* java.awt包与java.awt.event包的区别:java.awt里都是组件,java.awt.event里都是事件对象和监听对象。
*
* 点开java.awt.event包,找到KeyListener,其内有三个方法:
*
* (1)void keyPressed(KeyEvent e):按下某个键时调用此方法。
* (2)void keyReleased(KeyEvent e):释放某个键时调用此方法。
* (3)void keyTyped(KeyEvent e):键入某个键时调用此方法。
*
*/
tf.addKeyListener(new KeyAdapter() {

@Override
public void keyPressed(KeyEvent e) {

//	System.out.println("key run..."+KeyEvent.getKeyText(e.getKeyCode()));
/*
* e.getKeyCode()是获取当前所按下键对应的编码(如a对应97),KeyEvent.getKeyText是获取编码对应的按键名称,所以
* KeyEvent.getKeyText(e.getKeyCode())拿到的就是当前按下什么键
*/

/*
* 【需求】只能在文本框输入数字
* 打开API,点进java.awt.event包,找到KeyListener接口,通过其内方法点进KeyEvent类,发现其内的字段摘要中,已经将
* 键盘上的按键名称全部定义static final类型,方便直接调用。那么我们只需要判断当前键盘按键是不是0~9即可。
*/
int code = e.getKeyCode();//先获取当前按键对应的编码
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){//根据编码判断是否为0~9数字
System.out.println("wrong input");
e.consume();
}

/*
* 【对e.consume()说明】
* 希望文本框中只能输入数字,那么输入别的内容(如字母)不应该出现在文本框中,直接在控制台输出wrong input,在KeyEvent中
* 没找到能满足需求的方法,那么去找其父类InputEvent,其内有方法:
*
* 		public void consume():使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
* 键盘输入后,默认方式是直接显示在文本框,那么这里可用consume()方法使其不按默认方式,即不显示在文本框
*
* 所以如果以上if条件满足,表示键盘输入的不是数字,那么wrong input且不显示在文本框。
* (e是KeyEvent类,可以直接调用其父类方法consume)
*/

/*
* 模拟QQ发送消息操作:按下ctrl+enter发送消息,代码如下:
*
*              if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
*					System.out.println("QQ来了");
*
* isControlDown()是判断当前按下的是否为ctrl键,e.getKeyCode()==KeyEvent.VK_ENTER是判断当前按键的编码是否等于
* 回车键的编码
*/

}

});

}

public static void main(String[] args){

new KeyListenerDemo();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: