我正在开发一个带有swing的Windows应用程序.
问题是:按下(并释放)ALT键后,下一次按键无效(不会触发keyPressed事件).仅识别释放下一个键.按下和释放CTRL或SHIFT之后ALT完全没有效果.您首先必须按另一个键或单击进入组件以从CTRL或SHIFT再次接收关键事件.
可能Windows将焦点从我的GUI组件转移到框架的标题/菜单.我需要ALT+ MouseWheel来移动我的应用程序中的图形,如果我之后想用CTRL+ MouseWheel 缩放图形,这将无法正常工作.那么你怎么停止ALT消除焦点(但仍然可以用例如访问menuItem ALT+F)?
我已经尝试过Component.requestFocus() - 但实际上我的组件并没有真正失去焦点.
一个显示行为的简单示例:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
class MyKeyListener implements KeyListener {
public void keyTyped(KeyEvent arg0) {}
public void keyPressed(KeyEvent arg0) {
System.out.println("Key perssed: " + arg0.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
System.out.println("Key released: " + arg0.getKeyCode());
}
}
public class KeyListenerDemo {
public static void main(String[] a) {
JFrame frame = new JFrame("Keytest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setFocusTraversalKeysEnabled(true);
JTextField textField = new JTextField();
textField.addKeyListener(new MyKeyListener());
frame.add(textField);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,以下工作:KeyEvent.consume()
使用此事件,以便由发起它的源以默认方式处理它.
这会阻止Windows窃取我的焦点,但我仍然可以使用ALT键盘助记符来访问我的菜单项.
感谢Scott W的评论!!
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |