KeyEvent.VK_REDO和类似常量如何在加速器中工作?

时间:2012-11-27 22:27:20

标签: java keyevent undo-redo accelerator

我正在尝试在Java应用程序中为undo,redo等创建菜单项加速器,以便我可以使用关键命令访问它们。我也想做到这一点,以便在正确的平台上出现正确的键命令。对于某些菜单项,例如“Undo”,它非常简单,因为它是 Cmd / Ctrl + Z

this.undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
                    KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

方法getMenuShortcutKeyMask()返回Mac上的 Cmd 键和Windows机器上的 Ctrl 键。到目前为止一切都很好。

但是有些菜单项在不同平台上的键组合截然不同。要在Mac OS上重做,你可以 Cmd + Shift + Z ,但在Windows上你可以 Ctrl + < KBD>ÿ。因此,除非您使用if / then语句检查您所在的平台并将两组参数中的一组传递给函数,否则上述代码将无法工作。

我注意到KeyEvent类中的常量是KeyEvent.REDO。我假设这是“Redo”组合键的常量,虽然我不确定,因为没有任何关于它的功能的文档。所以我尝试了以下内容:

this.redoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
                    KeyEvent.VK_REDO, 0));

我曾希望这会导致将适当的组合键应用为加速器,但是不会显示任何加速器(即菜单项名称旁边没有任何组合键的指示符)。这是KeyEvent.VK_UNDO的正确使用,如果是,我做错了什么?

0 个答案:

没有答案