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);
}
}
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. –
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ę. –
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 –