| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5229 人关注过本帖
标题:如何给一个按钮添加快捷键
取消只看楼主 加入收藏
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
如何给一个按钮添加快捷键
我向设计一个按钮类,直接从Component类派生,界面基本上和WindowsXP SP3按钮相仿,按钮的设计上基本上完成,包括按钮快捷键下划线的显示和处理,但是想给按钮添加快捷键的动作时遇到了难题,因为在使用快捷键时按钮控件基本上不是输入焦点,因此也无法触发键盘事件,不知道谁能指点我,要求:
1、触发快捷键的事件应该在按钮类之内,而不是在其父窗口处理快捷键事件。
2、要求使用基本的GUI组件,不能使用Swing组件。
3、在父窗口内输入快捷键时,不管焦点位于哪个控件上,应该都能够触发这个控件的快捷键事件,就如java的菜单项的动作一样。
搜索更多相关主题的帖子: 按钮 
2009-09-14 23:21
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:0 
实际上就是要求能够在组件中监控父窗口的按键事件,并监听到发生快捷键按键事件时触发一个ActionEvent的单击事件以便父窗口处理按钮事件
2009-09-15 08:45
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:0 
没有回复怎么结帖啊。
2009-09-17 00:58
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:0 
此问题最终解决方法:
在按钮控件的paint()方法中增加如下语句:
        // 将父窗口所有组件的键盘输入事件加入侦听器
        Component[] comp = getParent().getComponents();
        if(comp != null){
            for(int i = 0; i<comp.length;i++){
                comp[i].addKeyListener(this);
            }
        }
         
        // 将父窗口键盘输入事件加入到侦听器
        getParent().addKeyListener(this);

    然后让按钮类实现KeyListener接口,以侦听父窗口及其所有组件的键盘事件,并在按钮CButton类的KeyTyped()方法中进行过滤并触发ActionEvent事件通知父窗口处理,父窗口除了对ActionEvent事件进行处理外,无需编写任何代码,完美解决了上述问题。
小结:
    我原来将上述代码放在了CButton的构造函数中,此时父窗口尚未构造完成,所以执行时抛出
NullPointerException异常,意思就是父窗口对象不存在,加入到paint()方法后,上述代码执行时,父窗口已构造完成,在内存中已有固定的内存区域与之对应,故不再抛出异常。
        
2009-09-20 22:07
快速回复:如何给一个按钮添加快捷键
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011928 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved