代码之家  ›  专栏  ›  技术社区  ›  räph

如何避免按下ALT键会使我的GUI失去焦点

  •  7
  • räph  · 技术社区  · 17 年前

    问题是:按下(并释放)后 中高音 键,下一次按键无效(不会触发按键事件)。只有释放下一把钥匙时才会被识别。按压和释放 控制键 转移 之后 没有任何效果。首先,您必须按另一个键或单击组件以接收来自的键事件 转移 再一次

    可能Windows将焦点从我的GUI组件转移到框架的标题/菜单上。 我需要 中高音 +鼠标滚轮在我的应用程序中移动图形,如果我以后想用鼠标滚轮缩放图形 控制键 +鼠标滚轮这不起作用。 那么我们该怎么停止呢 中高音 远离焦点(但仍然能够访问菜单项,例如。 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);
    }
    }
    
    2 回复  |  直到 12 年前
        1
  •  6
  •   räph    17 年前

    在我的例子中,以下方法有效:KeyEvent.consume()

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

    感谢Scott W的评论!!

        2
  •  0
  •   Marko    17 年前

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