public class KeyEventt {
private Frame f;
private TextField tf;
KeyEventt()
{
init();
}
public void init()
{
f = new Frame("my frame");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf = new TextField(20); //TextField是文本框
f.add(tf);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//在文本框上注册了一个键盘监听,通过判断键盘输入的字符来判断你输入的是不是数字
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))//code>=KeyEvent.VK_0:你输入的那个键盘值>=0
{
System.out.println(code+".....是非法的");
e.consume();
}
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new KeyEventt();
}
}
代码的运行效果:
当你往文本框里面输入字符时,如果输入的不是数字他就不把字符输入到文本框里了,,文本框里面只有数字
问题:
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) 这里判断时我为什么不能写code>=0&& code<=9 ?????
我对这句话code>=KeyEvent.VK_0 的理解是:
code是我按下键盘后返回的键盘码,比如你按下ENTER键,那么code就是27,,,之后拿这27和KeyEvent.VK_0 比较,,,,KeyEvent.VK_0 返回的是0,,,,VK_0 里的0对应的ascll码是0,,,
那么我为什么不能拿27和0直接比呢,,而是27和KeyEvent.VK_0 比,,,
我还有一种想法:就是通过e.getKeyText(e.getKeyCode())方法获取到键盘的文本信息,然后判断获取到的文本信息是不是数字,,,下面代码
String s=e.getKeyText(e.getKeyCode());
int i=Integer.valueOf(s);
if (!(i>=0 && i<=9)) {
System.out.println("你输入的字符是非法的");
e.consume();
}
但是问题来了,,,我这样写后,,,我按下键盘e时由于 String s= 'e',,,所以int i=Integer.valueOf(s); 就报转换类型异常了,,,那么这里又改如何处理,,
|
|