Java 检查换档键是否按下
我正在编写一个应用程序,启动时应该检查是否按下了shift键。为此,我创建了一个小班,负责:Java 检查换档键是否按下,java,keyboard,keyboardfocusmanager,Java,Keyboard,Keyboardfocusmanager,我正在编写一个应用程序,启动时应该检查是否按下了shift键。为此,我创建了一个小班,负责: import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent; public class KeyboardListener { private static boolean isShiftDown; static { K
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
public class KeyboardListener {
private static boolean isShiftDown;
static {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(
new KeyEventDispatcher() {
public boolean dispatchKeyEvent(KeyEvent e) {
isShiftDown = e.isShiftDown();
return false;
}
});
}
public static boolean isShiftDown() {
return isShiftDown;
}
}
但是,如果在应用程序启动时已按下shift键,则此操作似乎不起作用。以下检查始终执行else情况
if (KeyboardListener.isShiftDown()) {
// ...
} else {
// this always gets executed
}
如果应用程序启动时已按下shift键,是否有方法检查是否按下了该键?我知道使用WinAPI可以做到这一点,但我更喜欢Javaish方式
提前谢谢 这似乎不可能,因为它需要应用程序轮询初始状态,而不是AWT/Swing使用的事件模型。清理您的编码风格可能会有所帮助,我发现您的代码很难阅读
您的程序可能不会侦听在程序按设计启动之前发生的转换,因为此转换是发送给父程序而不是发送给它的。我将此描述为一种黑客行为,但它确实解决了问题(有一些缺点),因此我想我会将其作为一种可能性提及 您可以使用
Robot
类来模拟应用程序不关心的某个键(可能是其中一个功能键)的击键。注册KeyListener
后立即运行此代码。您将看到一个关键事件,它将告诉您Shift
是否已关闭
警告:这将在系统中显示为用户实际按下并释放了F24
(或您选择的任何键)。这可能会产生意想不到的副作用
(new Thread( )
{
@Override
public void run( )
{
try
{
java.awt.Robot robot = new Robot();
robot.delay( 100 );
robot.keyPress( KeyEvent.VK_F24 );
robot.keyRelease( KeyEvent.VK_F24 );
}
catch ( Exception e )
{
}
}
}).start( );
很抱歉,这是我第一个使用GUI框架的Java程序。我该怎么做才能使我的代码更具可读性?基本上,你在一行中做了太多的操作,使用了更多的变量和更少的匿名实体。请记住,代码是供人们阅读的,而不是供计算机阅读的,您的优化编译器将主要负责使其高效运行。