【发布时间】:2014-06-27 16:40:03
【问题描述】:
我想知道是否有任何方法可以找出是否在不使用 InputEvent 的情况下按下了任何键或鼠标按钮。
例如:我的应用程序没有焦点,但是当它获得焦点时,我想知道是否按下了 Ctrl 键。这在大多数情况下都有效,但如果通过单击标题栏获得焦点(这正是我正在寻找的),则无效。
或者:我开始拖动一个窗口,我想知道在此拖动过程中是否按下或释放了 Ctrl 键。
我曾尝试监听 Keystrokes 并使用 AWTEventListener 但这无济于事,因为没有关于按下的键的信息。
有没有办法从 Swing 中获取按下的键? 据我搜索,我不认为这是因为修饰符是直接从操作系统生成的事件(例如 XWindow 中的 getModifiers() )收集在工具包中的,但也许我错了。
有这种方式:GlobalKeyListener,但它非常复杂并且还依赖于操作系统。
【问题讨论】:
-
你可以试试这个,InputMap inputMap = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(KeyStroke.getKeyStroke("ctrl"), "aSwingAction"); component.getActionMap().put("Swing 的 AbstractAction", action);在这里,您可以将诸如 ctrl 或 alt 之类的按键绑定到 Swing Action,您必须编写一个 Swing 动作,当您按下此按键时会调用它
-
使用未修饰的框架,则 KeyStrokes 将由 Java 处理。当然你需要实现自己的“标题栏”并支持自己拖动。
-
@rahulpasricha - 我希望它在窗口没有聚焦时也能工作。
-
@camickr - 不能更改标题栏。我想创建一个非侵入式库。
标签: java swing listener keystroke