如何避免按下ALT键会从我的GUI中消除焦点

时间:2009-05-15 13:02:56

标签: java swing

我正在Windows中开发一个带有swing的Java应用程序。

问题是:在按下(并释放) ALT 键后,下一次按键无效(不会触发keyPressed事件)。仅识别释放下一个键。在 ALT 之后按下并释放 CTRL SHIFT 完全没有效果。您首先必须按另一个键或单击该组件才能再次从 CTRL SHIFT 接收关键事件。

Windows可能会将焦点从我的GUI组件转移到框架的标题/菜单。 我需要 ALT + MouseWheel来移动我的应用程序中的图形,如果我之后想用 CTRL + MouseWheel缩放图形,这将无法正常工作。 那么如何阻止 ALT 取消焦点(但仍然可以使用例如 ALT + F 访问menuItem?)

我已经尝试过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);
}
}

2 个答案:

答案 0 :(得分:5)

在我的情况下,以下工作:KeyEvent.consume()

  

使用此事件,以便发起它的源不会以默认方式处理它。

这会阻止Windows窃取我的焦点,但我仍然可以使用ALT键盘助记符来访问我的菜单项。

感谢Scott W的评论!!

答案 1 :(得分:0)

我认为这是不可能的,至少不是摆动。我使用过的每一个swing应用程序都有同样的问题。这是我放弃使用Netbeans IDE的主要原因之一,尽管IDE非常好。 SWT应用程序没有这个问题。