如何检查Java启动时按下的键
时间:2020-03-06 15:00:15 来源:igfitidea点击:
我正在尝试编写一个分辨率选择对话框,该对话框在程序首次启动时会弹出。为了避免使用户感到无聊,我想实现相当标准的功能,即可以通过复选框关闭该对话框,但是可以通过在启动时按住alt键来恢复对话框。
不幸的是,没有明显的方法来询问java当前是否正在按下给定的键。我们只能通过KeyListener进行注册,以获知新的按键操作,但是如果按键在应用程序启动之前启动,则无济于事。
解决方案
我对Java不太了解(大多数情况下是C#中的代码),但是对于用C编写的小型加载程序或者通过某些参数(例如某个键是否按下)启动Java应用程序的东西呢?
import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; public class LockingKeyDemo { static Toolkit kit = Toolkit.getDefaultToolkit(); public static void main(String[] args) { JFrame frame = new JFrame(); frame.addWindowListener(new WindowAdapter() { public void windowActivated(WindowEvent e) { System.out.println("caps lock1 = " + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); try { Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyRelease(KeyEvent.VK_CONTROL); } catch (Exception e2) { System.out.println(e2); } System.out.println("caps lock2 = " + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); } }); frame.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { System.out.println("caps lock3 = " + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
嗯,按键检测有两种类型:基于事件的和轮询。如果我们在启动时轮询键盘上的" KEY_PRESSED"(通过一个带有" sleep.thread(timeInMs)"的循环,不断检查键是否按下),那么我们可以检测到启动时是否已按下该键。
public class LockingKeyDemo { static Toolkit kit = Toolkit.getDefaultToolkit(); public static void main(String[] args) { System.out.println("caps lock2 = " + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); } }
因此看来我们可以执行此操作,但仅适用于Caps Lock等。因此,我已为此目的而使用大写锁定。不完美,但是还可以。