2009-05-15 12 views
7

Zajmuję się tworzeniem aplikacji java z zamachem w systemie Windows.Jak uniknąć tego, że naciśnięcie klawisza ALT odsuwa fokus od mojego GUI

Problem polega na tym, że po naciśnięciu (i zwolnieniu) klawisza, następne naciśnięcie klawisza nie ma żadnego efektu (nie zostanie wywołane zdarzenie keyPressed). Zostanie rozpoznane tylko zwolnienie następnego klawisza. Naciśnięcie i zwolnienie klawisza nie powoduje żadnego efektu. Najpierw należy nacisnąć inny klawisz lub kliknąć składnik, aby ponownie odebrać kluczowe zdarzenia z CTRL lub SHIFT.

Prawdopodobnie system Windows przenosi ostrość z mojego komponentu GUI do tytułu/menu ramki. Potrzebuję ALT + MouseWheel do przenoszenia grafiki w mojej aplikacji, jeśli chcę później powiększyć grafikę za pomocą CTRL + MouseWheel to nie zadziała. A więc zatrzymanie ALT przed odebraniem fokusu (ale nadal można uzyskać dostęp do elementu menu np. ALT + F)?

Próbowałem już Component.requestFocus() - ale w rzeczywistości mój komponent naprawdę nie traci ostrości.

Prostym przykładem, który pokazuje zachowanie:

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

Czy możesz spożywać() KeyEvents dla klucza ALT? Przypuszczam, że problem polegałby na tym, że złamałoby to normalną funkcjonalność klawisza ALT w systemie Windows. –

+0

Nie, chcę zachować funkcjonalność systemu Windows - aby uzyskać dostęp do paska menu. Więc właściwie nie chodzi o to, jak uniknąć przełącznika ostrości, ale jak odzyskać koncentrację. –

+0

rodzaj rozwiązany: Scott, miałeś rację. w moim przypadku consume() faktycznie działał. Mogę używać ALT razem z kółkiem myszy dla mojej funkcjonalności, ale wciąż mam dostęp do menu za pomocą np. ALT + F –

Odpowiedz

5

W moim przypadku następuje pracował: KeyEvent.consume()

zużywa to wydarzenie tak, że nie będą przetwarzane w sposób domyślny przez źródło której powstał.

To powstrzymuje system Windows przed kradzieżą fokusa, ale wciąż mam dostęp do menuitem z mnemonikami klawiszy za pomocą ALT.

Podziękowania dla Scotta W za komentarz!

0

Nie sądzę, że jest to możliwe, a przynajmniej nie w toku. Każda pojedyncza aplikacja, której używałem, miała ten sam problem. Jest to jeden z głównych powodów, dla których zrezygnowałem z używania Netbeans IDE, chociaż IDE jest ogólnie bardzo ładne. Aplikacje SWT nie mają tego problemu.

+0

Już bałem się uzyskać tę odpowiedź (ale czy nie ma jakiegoś obejścia, aby ponownie uzyskać kluczowe skupienie? –

+0

Nie wiem. – Marko

Powiązane problemy