java给按钮添加快捷键_javaswing中给按钮添加快捷键

使用快捷键时按钮控件基本上不是输入焦点,因此也无法触发键盘事件,查看了帮助文档,发现触发此事件的主体可以是本身也可以是主体的父类

新建一个类让它继承JButton并实现keyListener,然后在按钮控件的paint()方法中增加如下语句:

// 将父窗口所有组件的键盘输入事件加入侦听器

Component[] comp = getParent().getComponents();

if(comp != null){

for(int i = 0; i

comp[i].addKeyListener(this);

}

}

// 将父窗口键盘输入事件加入到侦听器

getParent().addKeyListener(this);

public class KeyEvent

指示组件中发生击键的事件。

当按下、释放或键入某个键时,由组件对象(如文本字段)生成此低级别事件。该事件被传递给每一个KeyListener 或 KeyAdapter 对象,这些对象使用组件的 addKeyListener 方法注册,以接收此类事件。(KeyAdapter 对象实现 KeyListener 接口。)发生事件时,所有此类侦听器对象都获取此 KeyEvent。

“键入键”事件 是高级别事件,通常不依赖于平台或键盘布局。输入 Unicode 字符时生成此类事件,它们被认为是输入字符的最佳方式。最简单的情况是按下单个键(如“a”)所产生的键入键事件。但是经常是通过一系列按键(如‘shift’+‘a’)来产生字符,并且按下键事件和键入键事件的映射关系可能是多对一或多对多的。键释放通常不需要生成一个键入键事件,但是在某些情况中,只有释放某个键才会生成键入键事件(如在 Windows 中通过 Alt-Numpad 方法来输入 ASCII 序列)。对于不生成 Unicode 字符的键是不会生成键入键事件的(如动作键、组合键等等)。

getKeyChar 方法总是返回有效的 Unicode 字符或 CHAR_UNDEFINED。KEY_TYPED 事件报告字符输入:KEY_PRESSED 和 KEY_RELEASED 事件不一定与字符输入相关联。因此,可以保证 getKeyChar 方法的结果仅对 KEY_TYPED 事件有意义。

对于按下键和释放键事件,getKeyCode 方法返回该事件的 keyCode。对于键入键事件,getKeyCode 方法总是返回 VK_UNDEFINED。

“按下键”和“释放键”事件 是低级别事件,并且依赖于平台和键盘布局。只要按下或释放键就生成这些事件,并且这些事件是获取不生成字符输入的键(如动作键、组合键等等)的惟一方式。由 getKeyCode 方法指示按下或释放的键,它返回一个虚拟键码。

虚拟键码 用于报告按下了键盘上的哪个键,而不是通过一个或多个击键组合所生成的字符(如“A”是由 shift+“a”生成的)。

例如,按下 Shift 键会生成 keyCode 为 VK_SHIFT 的 KEY_PRESSED 事件,而按下“a”键将生成 keyCode 为 VK_A 的 KEY_PRESSED 事件。释放“a”键后,会激发 keyCode 为 VK_A 的 KEY_RELEASED 事件。另外,还会生成一个 keyChar 值为 "A" 的 KEY_TYPED 事件。

注:

不产生 Unicode 字符的键组合(如 F1 和 HELP 键等动作键)不会生成 KEY_TYPED 事件。

并非所有键盘和系统都能够生成所有的虚拟键码。在 Java 中不会尝试人为地生成这些键。

虚拟键码不标识物理键:它们取决于平台和键盘布局。例如,使用美国键盘布局时生成 VK_Q 的键在使用法国键盘布局时将生成 VK_A。

并非所有的字符都有与其关联的 keycode。例如,没有用于问号的 keycode,因为没有在主层上显示问号的键盘。

为了支持平台无关的动作键处理,Java 平台为某些功能使用少量附加虚拟键常量,否则必须通过解释虚拟键码和修饰符来识别这些功能。例如,对于日文 Windows 键盘,返回 VK_ALL_CANDIDATES 而不是 VK_CONVERT 加 ALT 修饰符。

警告:除了 Java 语言定义的这些键之外(VK_ENTER、VK_BACK_SPACE 和 VK_TAB),不要依赖于 VK_ 常量值。Sun 保留更改这些值的权利,以备将来根据需要适应更大范围的键盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值