我正在尝试在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
的正确使用,如果是,我做错了什么?