【问题标题】:Detect the Windows key modifier检测 Windows 键修饰符
【发布时间】:2015-01-16 18:39:54
【问题描述】:

我如何检测KeyEventWindows key 修饰符?我已经添加了代码:

textField.addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent e) {
        if ((e.getKeyCode() & KeyEvent.VK_ESCAPE) == KeyEvent.VK_ESCAPE) {
            textField.setText("");
        }
    }
});

但问题是,当我使用Windows zoom 并尝试使用Win + Escape 退出它时,如果焦点在TextField,它的内容就会清除。我试过按e.getModifiersEx() 过滤,但它返回0。我发现的唯一方法是检测Windows 是否按下,是创建boolean 字段并在Windows 按下/释放时更改它的值。

那么,有什么方法可以从KeyEvent 获取ESCAPE released 事件的Windows 键压状态?

【问题讨论】:

标签: java keyevent


【解决方案1】:

我自己用的方式:

AbstractAction escapeAction = AbstractAction() {
    public void actionPerfomed(ActionEvent e) {
        setText("");
    }
}

textField.addCaretListener(new CaretListener() {
    @Override
    public void caretUpdate(CaretEvent e) {
        if (textField.getText() == null || textField.getText().isEmpty()) {
            textField.getActionMap().remove("escape");
            textField.getInputMap().remove(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0));
        } else {
            textField.getActionMap().put("escape", escapeAction);
            textField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), escapeAction);
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2012-05-26
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多