我今天遇到了同样的问题:我想捕捉Ctrl+ =,我们按下思考Ctrl+ +,并将其与放大动作相关联。我使用巴西 ABNT2 键盘。打字时,要获得加号,我需要使用组合Shift+ =,所以我不能直接抓住Ctrl+ +。我可以像@Aqua建议的那样做,即实际捕获Ctrl++ ,但对我来说似乎并不自然。我决定看看一些应用程序是如何解决这个问题的。Shift=
Notepad++将放大和缩小分别与小键盘的加号和减号相关联。这是解决问题的简单方法,但这也不是我想要的。反过来, Mozilla Firefox正是我想要的:它说Ctrl++是放大的组合键,但它实际捕获的是Ctrl+ =。此外,它还可以理解我是否使用小键盘的加号来放大。
我是如何解决问题的
所以,这就是我决定解决问题的方法:在创建 时Action
,我将组合键Ctrl++与放大的动作相关联,实际上无法捕捉到:
Action zoomInAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent event) {
zoomIn();
}
};
zoomInAction.putValue(AbstractAction.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, KeyEvent.CTRL_DOWN_MASK));
JMenuItem zoomInMenuItem = new JMenuItem(zoomInAction);
viewMenu.add(zoomInMenuItem);
洞中的王牌是将Ctrl+=组合分开并同样对待它:
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent event) {
}
@Override
public void keyReleased(KeyEvent event) {
}
@Override
public void keyPressed(KeyEvent event) {
if (event.isControlDown() && (event.getKeyCode() == KeyEvent.VK_EQUALS)) {
zoomIn();
}
}
});
这样,界面(即与JMenuItem
对应的Action
)告诉用户使用快捷键Ctrl++来放大。然后用户按下Ctrl+ =,想到Ctrl+ +,但应用程序理解该组合并按照用户期望的那样操作这样做。
这是我的第一个 Stack Overflow 答案,对任何事情都感到抱歉:)