【发布时间】:2021-04-11 12:21:44
【问题描述】:
我正在尝试绑定 Ctrl + + 和 Ctrl + - 来放大/缩小动作.
question 解释说,在某些键盘布局中,+ 和 - 存在于主要层上,而在其他键盘布局中,它们存在于次要层上(您必须按 Shift 之类的修饰键键入)。另请参阅错误 4262044 和 6942481。
目前看来我必须分析我想要支持的所有布局,并根据当前布局配置不同的按键绑定,例如:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
public class KeyStrokeTest extends JFrame {
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();
// en_US
register(frame, "control shift EQUALS");
register(frame, "control MINUS");
// de_DE
// register(frame, "control PLUS");
// register(frame, "control MINUS");
// de_CH
// register(frame, "control shift 1");
// register(frame, "control MINUS");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.getRootPane().setFocusable(true);
frame.getRootPane().requestFocusInWindow();
}
private static void register(JFrame frame, String keyStrokeDefinition) {
KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeDefinition);
String key = keyStrokeDefinition;
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, key);
frame.getRootPane().getActionMap().put(key, new TestAction(keyStrokeDefinition));
}
private static class TestAction extends AbstractAction {
private String info;
public TestAction(String info) {
this.info = info;
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action performed: " + info);
}
}
}
有没有办法为所有(或大多数)布局以编程方式为+ 和- 找出正确的击键?
【问题讨论】:
标签: java swing keyboard-shortcuts keyboard-events keyboard-layout