我有一个问题setAccelerator().现在,我有一些代码适用于Ctrl + X进行DELETE操作.我想将加速器设置为Shift + Delete也是如此JMenuItem.
我的代码如下:
JMenuItem item = new JMenuItem(menuText);
item.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_X, KeyEvent.CTRL_MASK));
item.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));
Run Code Online (Sandbox Code Playgroud)
但这仅适用于Shift + Delete操作.似乎它覆盖了Ctrl + X操作.我们可以让这两个键击同时工作吗?
请指导.
是的,可以做到.在幕后,setAccelerator()只是创建一个Key Binding,但是你注意到第二个绑定取代了第一个.
因此,您需要创建一个Action(而不是ActionListener)来添加到菜单项.有关更多信息,请阅读有关如何使用操作的Swing教程中的部分.现在您已经创建了Action,您可以通过手动创建Key Binding与另一个KeyStroke共享Action.您可以阅读Swing教程中有关如何使用键绑定的部分以获取详细说明.或者你可以在Key Bindings上阅读我的博客,它提供了一些简单的代码示例.
第二个绑定不会显示在菜单项本身上.
来自: http: //java.sun.com/j2se/1.4.2/docs/api/java/awt/AWTEvent.html
掩码还用于指定 AWTEventListener 应侦听的事件类型。
因此,您可以组合两个键的掩码,但不能组合 KeyEvents。
item.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_X, KeyEvent.CTRL_MASK + KeyEvent.SHIFT_MASK));
Run Code Online (Sandbox Code Playgroud)
一种解决方案是在中间捕获 KeyEvent(在组件触发它之后,但在侦听器对其执行操作之前)并检查它是否是这两种组合之一。然后触发一个事件,您以编程方式同意代表您想要的操作。
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |