2010-12-17 5 views
6

J Przyciśnij przycisk tak, aby naciśnięcie klawisza spacji było takie samo, jak kliknięcie przycisku J (zakładając, że przycisk J ma fokus, co zakładam tutaj). Czy istnieje sposób, aby wyłączyć to zachowanie, więc ignorują naciśnięcie spacji?Wyłączanie wyzwalania klawisza spacji Kliknij przycisk JButton

Ponadto, ogólniej, czy istnieje technika wykonania tego przy pomocy AbstractButtons?

+0

Myślałem, że twoje pytanie dotyczyło przycisków w liczbie mnogiej. Nie jest zbyt dobrym interfejsem, aby niektóre przyciski działały z klawiszem spacji, a inne nie. Dlaczego więc chciałbyś zmieniać przyciski po jednym na raz? – camickr

Odpowiedz

1

Można ją wyłączyć, wykonując

jbutton.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "none"); 

To wydaje się działać dla innych AbstractButton s, jak również, takie jak JRadioButton s.

@camickr Jak zaznacza below można go rozwiązać dla wszystkich JButton s za jednym razem, co następuje:

InputMap im = (InputMap)UIManager.get("Button.focusInputMap"); 
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none"); 
im.put(KeyStroke.getKeyStroke("released SPACE"), "none"); 
+0

Dzięki za poinformowanie mnie. Odpowiedź zaktualizowana. – aioobe

3

Link podany przez aioobe pokazuje, jak to zrobić dla pojedynczego przycisku. Jeśli chcesz to zrobić dla wszystkich JButton na zrobiłbyś:

InputMap im = (InputMap)UIManager.get("Button.focusInputMap"); 
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none"); 
im.put(KeyStroke.getKeyStroke("released SPACE"), "none"); 

jeśli chcesz to zrobić dla pól wyboru i przycisków radiowych trzeba by powtórzyć powyższe dla każdego innego wejścia mapie.

Możesz przeczytać Enter Key and Button. W rzeczywistości robi odwrotnie, niż chcesz, ponieważ wyjaśnia, jak wywołać przycisk, gdy używany jest klawisz Enter. Ale może pomóc wyjaśnić, dlaczego to rozwiązanie działa w odwrotnym kierunku.