日期:2014-05-20  浏览次数:20831 次

怎样监听全局键盘快捷键 [Java/J2SE]
怎样监听全局快捷键,就像QQ一样按 "Ctrl+Alt+z "组合键就显出界面的。

我尝试过添加:
Toolkit   toolkit   =   Toolkit.getDefaultToolkit();
toolkit.addAWTEventListener(new   testListener(),   AWTEvent.KEY_EVENT_MASK);
监听:
class   testListener   implements   AWTEventListener   {
public   void   eventDispatched(AWTEvent   event)   {
if(){Do}
}
}
可是怎么样都捕捉不出 "Ctrl+F9 ",最多捕捉到F9。

疑问有二:
1.监听全局是不是错了?
2.怎么样才能捕捉到组合键并且判断、响应?

如果方便最好能给出一个例子,谢谢啦!

大虲:我注册不久,没来得及发帖,没分给,对不住!

------解决方案--------------------
哎,这种感觉不太好受啊……
我以前也是(虽然也才注册不久),问一个问题等很久都等不到消息……
看来是遇上难兄了,呵呵,我也尽点微薄之力吧。
你说的情形我没试过,但是我想我能提供点关于组合键的经验。

请参见文档java.awt.event.KeyEvent;类的描述
要监听一个键是否有其他键修饰(主要是指CTRL,ALT,SHIFT),在产生的KeyEvent对象有个方法
getModifier();具体是怎样我也记不太清了,大概吧,他将返回按键同时的修饰键情况。

比如,
KeyListener kl=new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode==KeyEvent.VK_F9 && e.getModifier()==KeyEvent.CTRL_MASK)
{
//要做的事
}
}
};
以上代码可能有问题(主要是getModifier()那里),因为我现在没有文档,也懒得下载,请自行核对
}
------解决方案--------------------
组合键应该这样写
e.getModifier() & (KeyEvent.VK_F9 | KeyEvent.CTRL_MASK) = e.getModifier()

全局监听的话 不用JNI估计实现不了 应该是注册快捷键到系统的