我正在尝试绑定(bind) Ctrl + + 和 Ctrl + - 来放大/缩小操作.
这个question解释说,在某些键盘布局上, + 和 - 存在于主层上,而在其他键盘布局上,它们存在于辅助层上(您必须按 Shift 来输入)。另请参阅错误 4262044和 6942481 .
目前看来我必须分析我想要支持的所有布局,并根据当前布局配置不同的按键绑定(bind),例如:
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);
}
}
}
有没有办法以编程方式找出所有(或大多数)布局的 +
和 -
的正确击键?
最佳答案
这包括通过任何方式输入“加号”,包括按下 CTRL 或 CTRL SHIFT:
register(f, "control MINUS");
register(f, "control SUBTRACT"); // minus on the numpad
// this covers typing a 'plus' by any means which include pressing down CTRL or CTRL SHIFT
f.getRootPane().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent evt) {
String name = "control (shift) +";
int mods = evt.getModifiersEx();
if (mods == KeyEvent.CTRL_DOWN_MASK
|| mods == (KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK)) {
if (evt.getKeyChar() == '+') {
System.out.println("Action performed: " + name);
}
}
}
});
关于java - 如何以编程方式确定不同键盘布局上 "Ctrl + Plus"和 "Ctrl + Minus"的正确击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67044917/