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

为什么捕获不到功能键?

楼主sneat(可乐)2003-11-04 10:52:27 在 Java / J2SE / 基础类 提问

在applet的button上产生ActionEvent   ae  
  无论按下哪个功能控制键如ctrl,shift等,得到的ae.getModifiers()总是0  
  不知下述代码有误吗?  
  import   java.awt.*;  
  import   java.awt.event.*;  
  import   java.applet.*;  
   
  public   class   ButtonDemo   extends   Applet  
                                      implements   ActionListener   {  
      String   msg1   =   "",   msg2   =   "";  
      Button   yes,   no,   maybe;  
      Label   l1,l2;  
   
      public   void   init()   {  
          yes   =   new   Button("Yes");  
          no   =   new   Button("No");  
          maybe   =   new   Button("Undecided");  
          l1   =   new   Label("                                                                               ");  
          l2   =   new   Label("                                                                               ");  
   
          yes.setActionCommand("是的");  
   
          add(yes);  
          add(no);  
          add(maybe);  
          add(l1);  
          add(l2);  
   
          yes.addActionListener(this);  
          no.addActionListener(this);  
          maybe.addActionListener(this);  
      }  
   
      public   void   actionPerformed(ActionEvent   ae)   {  
          String   str   =   ae.getActionCommand();  
          if(str.equals("是的"))   {  
              msg1   =   "You   pressed   Yes.";  
          }  
          else   if(str.equals("No"))   {  
              msg1   =   "You   pressed   No.";  
          }  
          else   {  
              msg1   =   "You   pressed   Undecided.";  
          }  
   
          switch(ae.getModifiers())  
  /*无论按下哪个功能控制键这里的ae.getModifiers()总是返回0,怎么回事?*/  
   
          {  
                          case   ActionEvent.ALT_MASK:   msg2="   ALT   Pressed!";  
                                                        break;  
                          case   ActionEvent.   CTRL_MASK:   msg2="   CTRL   Pressed!";  
                                                        break;  
                          case   ActionEvent.SHIFT_MASK:   msg2="   SHIFT   Pressed!";  
                                                        break;  
                          case   ActionEvent.   META_MASK:   msg2="   META   Pressed!";  
                                                        break;  
                          default:   msg2="   NO   control   Pressed!";  
        }  
   
        l1.setText(msg1);  
        l2.setText(msg2);  
        }  
  } 问题点数:100、回复次数:16Top

1 楼junyi2003(超级菜鸟)回复于 2003-11-04 11:10:07 得分 0

关注Top

2 楼LoveRose(旺旺)回复于 2003-11-04 11:11:10 得分 50

ae.getModifiers()得到的结果是有的,  
  是你的代码有错误,得到的结果跟ActionEvent.SHIFT_MASK这类的常量不一致而已  
  比如按下Ctrl,     getModifiers()值为128,而ActionEvent.   CTRL_MASK的值是2  
  Top

3 楼loveyousomuch(★Allen★)回复于 2003-11-04 11:18:14 得分 0

呵呵,路过一下!Top

4 楼LoveRose(旺旺)回复于 2003-11-04 11:18:39 得分 0

case语句中改为  
  KeyEvent.ALT_DOWN_MASK   等就可以了Top

5 楼sneat(可乐)回复于 2003-11-04 11:33:36 得分 0

好像不是这么回事,我在调试的过程中看了getModifiers()的值,每次均为0,  
  另外KeyEvent没有ALT_DOWN_MASK这个域。Top

6 楼kinzey34(无声之舞)回复于 2003-11-04 11:33:58 得分 50

把你代码里的下面这行:  
  switch(ae.getModifiers())  
  替换为:  
  switch(ae.getModifiers()/64)  
  就可以了Top

7 楼LoveRose(旺旺)回复于 2003-11-04 11:37:14 得分 0

上面这种也是可以的  
   
  不过sneat(可乐)   KeyEvent.AlT_DOWN_MASK肯定是有的  
  是不是jdk版本不同我的是1.4Top

8 楼kinzey34(无声之舞)回复于 2003-11-04 11:42:29 得分 0

KeyEvent.AlT_DOWN_MASK  
  是KeyEvent事件的常量,  
  你用的是ActionEvent,当然无此常量  
  并不是JDK版本的问题Top

9 楼LoveRose(旺旺)回复于 2003-11-04 11:56:26 得分 0

to:kinzey34(无声之舞)    
  AlT_DOWN_MASK是static   常量  
  随时可以调用  
  我只要他的int数值  
  Top

10 楼sneat(可乐)回复于 2003-11-04 12:21:19 得分 0

kinzey34(无声之舞)   的也不行,  
  问题出在这里,  
  JBuilder里我在switch(ae.getModifiers())处设了断点  
  但无论先前按下哪个功能控制键这里的ae.getModifiers()总是显示0  
   
  Top

11 楼kinzey34(无声之舞)回复于 2003-11-04 13:42:08 得分 0

你是同时用鼠标点了按钮和按下了CTRL等键吗?Top

12 楼sneat(可乐)回复于 2003-11-04 14:03:12 得分 0

按下了呀,在你的机器上能通过吗?Top

13 楼sneat(可乐)回复于 2003-11-04 15:32:35 得分 0

我还是发现了问题,在J2SE1.4下的情况正如旺旺和无声之鹤说的,但在1。3下ae.getModifiers()总是等于0;Top

14 楼sneat(可乐)回复于 2003-11-04 17:42:15 得分 0

研究了一下午,加上到sun的论坛上的提问竟发现,  
  a.       1.3版本的ae.getModifiers()在任何情况下返回0!  
  b.       1.4.1版本的Button(AWT)返回分别是64×1、2、4、8  
  c.       1.4.1版本的Jbutton(Swing)返回分别是16+1、2、4、8  
  不知为什么?  
  一下是老外回的一个例程,属于c情况  
   
  import   java.awt.*;  
  import   java.awt.event.*;  
  import   javax.swing.*;    
  public   class   ActionEventTest   {        
  public   static   void   main(String[]   args)   {    
        final   JLabel   label   =   new   JLabel("   ",   JLabel.CENTER);    
        JButton   button   =   new   JButton("generate   event");          
        button.addActionListener(new   ActionListener()   {              
        public   void   actionPerformed(ActionEvent   e)   {                  
        int   modifiers   =   e.getModifiers();                  
        String   modifierText   =   "";                  
        if((modifiers   &   ActionEvent.SHIFT_MASK)   ==   1)                      
                modifierText   ="   SHIFT_MASK,";                  
        if((modifiers   &   ActionEvent.CTRL_MASK)   ==   2)                      
                modifierText=   "   CTRL_MASK,";                  
        if((modifiers   &   ActionEvent.META_MASK)   ==   4)              
              modifierText   ="   META_MASK,";                  
        if((modifiers   &   ActionEvent.ALT_MASK)   ==   8)                  
              modifierText   ="   ALT_MASK",";                    
        if(modifierText.equals(""))                    
              modifierText   =   "none";                  
                        else                    
                              modifierText   =   modifierText.substring(0,modifierText.lastIndexOf(","));    
                      label.setText("modifiers   =   "   +   modifierText);    
          }      
        });      
                    JPanel   northPanel   =   new   JPanel();  
                    northPanel.add(button);          
                    String[]   labelStrings   =   {             "SHIFT_MASK         1",   "CTRL_MASK         2",   "META_MASK         4",   "ALT_MASK         8"         };  
                    JPanel   panel   =   new   JPanel(new   GridBagLayout());    
                    GridBagConstraints   gbc   =   new   GridBagConstraints();          
                    gbc.weighty   =   1.0;          
                    gbc.gridwidth   =   gbc.REMAINDER;          
                    panel.add(label,   gbc);          
                    for(int   i   =   0;   i   <   labelStrings.length;   i++)              
                          panel.add(new   JLabel(labelStrings[i]),   gbc);          
                    JFrame   f   =   new   JFrame("ActionEvent   Test");          
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          
                    f.getContentPane().add(northPanel,   "North");          
                    f.getContentPane().add(panel);          
                    f.setSize(400,300);          
                    f.setLocation(300,400);          
                    f.setVisible(true);      
          }  
  }  
  Top

15 楼kinzey34(无声之舞)回复于 2003-11-05 19:14:43 得分 0

sun把getModifiers()做成这样,是不是1.4的工程师对1.3的工程师不满意,或是swing的对awt的  
  有意见?Top

16 楼sneat(可乐)回复于 2003-11-07 23:45:32 得分 0

hehe   不知道Top

相关问题

  • 如何捕获功能键(例F8)被按下的键盘消息,谢了
  • Delphi中快捷键和功能键不能用了
  • 不需要让用户按Alt+Enter、Ctrl+Alt+Del、Ctrl+Esc等功能键
  • 求封锁特殊功能键的完整源代码,分不够,再加
  • 为什么我调试时不能捕获断点?
  • 为什么我的combobox的click事件捕获不到呢
  • 为什么这个异常我不能捕获?
  • 为什么我的combobox的change事件捕获不到呢?
  • 为什么在Tab Control控件里捕获不到OnKeyUp()事件?
  • 这样的内存异常为什么捕获不到?

关键词

  • 版本
  • 代码
  • modifiertext
  • getmodifiers
  • actionevent
  • mask
  • ae
  • 常量
  • keyevent
  • msg

得分解答快速导航

  • 帖主:sneat
  • LoveRose
  • kinzey34

相关链接

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

广告也精彩

反馈

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