gpt4 book ai didi

java - InputMap for CTRL only 中的 KeyStroke 必须有 CTRL_DOWN_MASK 和 CTRL_MASK(仅限 win10)

转载 作者:行者123 更新时间:2023-11-30 10:46:48 24 4
gpt4 key购买 nike

我有一个自定义组件(继承自 JComponent),我喜欢在按住 CTRL 的同时为链接添加下划线,就像 eclipse 一样。我决定使用 InputMapActionMap 来实现按键/释放功能。

我使用这段代码来查找笔画:

stroke = KeyStroke.getKeyStroke("pressed CONTROL");

但不知何故这是错误的。我调试了 JComponent 的 processKeyBinding 方法,发现如果我按下 CTRL 一个具有修饰符 130 的 KeyStroke

enter image description here

(this 是我的 InputMap,arg0 是键盘输入的 KeyStroke)

我认为 130 是添加 CTRL_DOWN_MASK 的结果,他的代码是 128CTRL_MASK 的代码是 2

  1. 为什么我必须添加这些修饰符?
  2. 这是跨平台的吗?
  3. 有官方文档吗?

完整的 camickr 请求示例:

public class Test extends JLabel {
public static void main(String[] args) {
final JFrame jf = new JFrame("Test");
final Test label = new Test();
jf.getContentPane().add(label);
jf.setBounds(200, 200, 500, 500);
jf.pack();
jf.setVisible(true);
label.grabFocus();
}

public Test() {
super("Foobar");
addBoldOnCtrl();
}

public void addBoldOnCtrl() {
final KeyStroke onDown = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, KeyEvent.CTRL_MASK + KeyEvent.CTRL_DOWN_MASK);
final String onDownName = "react on ctrl";
getInputMap().put(onDown, onDownName);
getActionMap().put(onDownName, new AbstractAction() {

@Override
public void actionPerformed(ActionEvent e) {
final Font f = getFont();
setFont(new Font(f.getFontName(), f.getStyle(), f.getSize() + 2));
repaint();
}
});
}
}

最佳答案

1.Why do i have to add theese modifiers?

您不必添加两个修饰符,只需添加 CTRL_DOWN_MASK。

因此,要创建您可以使用的 KeyStroke:

KeyStroke ks = KeyStroke.getKeyStroke("control CONTROL");

KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, KeyEvent.CTRL_DOWN_MASK);

我不知道有任何文档明确说明您需要这样做,但“修饰键”与键盘上的其他键不同。

关于java - InputMap for CTRL only 中的 KeyStroke 必须有 CTRL_DOWN_MASK 和 CTRL_MASK(仅限 win10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com