CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  GUI 设计

捕捉键盘事件时遇到奇怪问题

楼主qingyuan18(zealot_tang)2006-03-01 17:36:54 在 Java / GUI 设计 提问

.......  
   
  this.jTextField.addKeyListener(this);  
   
  .......  
  public   void   keyPressed(KeyEvent   e)  
  {  
  this.jTextField.setText("");  
  String   sKeyPress   =   "";  
  if(e.getKeyCode()   ==   KeyEvent.VK_BACK_SPACE)  
  {  
  this.jTextField.setText("");  
  }  
  else  
  {  
  if(e.isAltDown())  
  {  
  sKeyPress   =   sKeyPress+"Alt+";  
  }  
  if(e.isControlDown())  
  {  
  sKeyPress   =   sKeyPress+"Clr+";  
  }  
  if(e.isShiftDown())  
  {  
  //sKeyPress   =   sKeyPress+"Sht+";  
  }  
   
  if(sKeyPress.split("\\+").length>3)  
  {  
  sKeyPress   =   "";  
  }  
  //System.out.println(e.getKeyCode());  
  sKeyPress   =   sKeyPress+e.getKeyChar();  
  this.jTextField.setText(sKeyPress);  
  }  
  }  
   
  现在我如果按Crl+任何一个键,jTextField中显示"Crl+",那个键获取到的KeyCode为0,但是按Alt+任意键又是正常的  
   
  这是怎么回事?难道无法获取Crl+XX或者Crl+Alt+XX这种组合键事件么?QQ的热键方式不也是Swing做的,它怎么实现的? 问题点数:50、回复次数:3Top

1 楼aaa2003gf(珍惜 (MSN:aaa2003gf@hotmail.com))回复于 2006-03-01 22:50:40 得分 0

快捷键是这样设置的吗?????Top

2 楼f_acme(沧海一声笑)回复于 2006-03-01 23:05:46 得分 50

sKeyPress   =   sKeyPress+e.getKeyChar();  
  改成sKeyPress   =   sKeyPress+e.getKeyCode();  
   
  看看getKeyChar的api说明:  
   
  public   char   getKeyChar()  
      Returns   the   character   associated   with   the   key   in   this   event.   For   example,   the   KEY_TYPED   event   for   shift   +   "a"   returns   the   value   for   "A".    
  KEY_PRESSED   and   KEY_RELEASED   events   are   not   intended   for   reporting   of   character   input.   Therefore,   the   values   returned   by   this   method   are   guaranteed   to   be   meaningful   only   for   KEY_TYPED   events.    
   
   
  Returns:  
  the   Unicode   character   defined   for   this   key   event.   If   no   valid   Unicode   character   exists   for   this   key   event,   CHAR_UNDEFINED   is   returned.Top

3 楼qingyuan18(zealot_tang)回复于 2006-03-02 14:00:37 得分 0

to:f_acme(沧海一声笑)  
  你说的方法我试过了的,在keyType事件中Crl+XX这种组合方式会被认做一个控制键,这时候用e.getKeyCode取得的值都是0,只能在keyPress事件中做处理。  
   
  问题已解决,方法如下:  
  .......  
   
  this.jTextField.addKeyListener(this);  
   
  .......  
  public   void   keyPressed(KeyEvent   e)  
  {  
  int   iClrFlag   =   0   ,iAltFlag   =   0;  
  this.keyCodeString   =   "";  
  if(e.getKeyCode()   ==   KeyEvent.VK_BACK_SPACE)  
  {  
  this.jTextField.setText("");  
  }  
  else  
  {  
  if(e.isAltDown())  
  {  
  iAltFlag   =   1;  
  }  
  if(e.isControlDown())  
  {  
  iClrFlag   =   1;  
  }  
  if(e.isShiftDown())  
  {  
  }  
   
  }  
   
                  if(iAltFlag   ==   1)  
                  {  
                  this.keyCodeString   =   this.keyCodeString   +   "Alt+";  
                  }  
                  if(iClrFlag   ==   1)  
                  {  
                  this.keyCodeString   =   this.keyCodeString   +   "Clr+";  
                  }  
                  if(   (keyCodeString.indexOf("+")>0)&&(keyCodeString.split("\\+").length>3))  
  {  
  keyCodeString   =   "";  
  }  
                  String   sKeyCodeTmp   =   e.getKeyText(e.getKeyCode());  
                  if(   (sKeyCodeTmp.endsWith("Ctrl"))||(sKeyCodeTmp.endsWith("Alt"))   )  
                  {  
                  this.jTextField.setText("");  
                  }  
                  else  
                  {  
                        this.keyCodeString   =   keyCodeString+sKeyCodeTmp;  
        this.jTextField.setText(this.keyCodeString);  
                  }  
  }  
   
  可能做的复杂了些,但毕竟能够在文本框中跟踪用户的组合键事件了,呵呵。  
  应该有更好的办法,大家再看看,如果没有回帖了就结帖。Top

相关问题

  • 挺奇怪的,为什么在FORMVIEW中我无法捕捉键盘消息啊?
  • 奇怪,捕捉不到!
  • 如何捕捉键盘电击
  • 键盘事件捕捉问题
  • 如何捕捉键盘事件?
  • 奇怪的视音频捕捉问题!
  • 遇到奇怪问题
  • 遇到奇怪问题
  • 遇到一奇怪现像
  • 怎样捕捉用户按下的数字键盘(小键盘)上的 * 键?

关键词

  • skeypress
  • keycodestring
  • jtextfield
  • skeycodetmp
  • getkeycode
  • getkeychar
  • iclrflag
  • ialtflag
  • crl
  • 事件

得分解答快速导航

  • 帖主:qingyuan18
  • f_acme

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo