2010-03-02 10 views
7

Załóżmy na przykład, że mam serię przycisków stylu paska narzędzi w górnej części głównego okna aplikacji. Chcę dołączyć do jednego z nich mnemonik, który jest jednym naciśnięciem klawisza, jak F3.Java Swing: Czy mogę ustawić przycisk mnemoniczny, który nie wymaga naciśnięcia klawisza Alt?

Po ustawieniu mnemonika na KeyEvent.VK_F3, użytkownik musi nacisnąć Alt + F3.

Jeśli masz pozycję menu, możesz ustawić akcelerator zamiast mnemonika i zdecydować, czy chcesz użyć klucza meta. Przyciski nie pozwalają jednak na ustawienie akceleratora.

Czy istnieje sposób na zmianę meta-klucza dla mnemoników przycisków?

Odpowiedz

4

Actions może powiązać fragment kodu z elementem menu, naciśnięciem klawisza, przyciskiem i wszystkim, co jest dla Ciebie interesujące.

Ogólnie rzecz biorąc, nie myśl o kodzie jako powiązanym z konkretnym naciśnięciem klawisza/zdarzeniem - i nie używaj anonimowych klas wewnętrznych. Zamiast tego używaj prawdziwych klas, gdzie Twój kod może być ponownie użyty dla różnych typów rzeczy. Ten wzorzec używany przez klasę Action daje kilka dobrych przykładów.

3

Cóż za kulisami, bez względu na to, czy używasz akceleratora, czy mnemonika na komponencie, metoda utworzy dla ciebie Key Binding.

Nic nie stoi na przeszkodzie, aby powiązać KeyStroke i Action z dowolnym komponentem i ręcznie utworzyć powiązanie klawiszy. Może nawet być komponentem, który nie ma metody setMNemonic (...).

0

Czy jesteś pewien, że akceleratory nie mogą być zdefiniowane na przyciskach, jeśli przycisk został skonfigurowany za pomocą akcji? (. Wiem, że to była prawda w pewnym momencie, ale myślałem, że to może być różny w nowszych wersjach Java)

W każdym razie, tu jest inna metoda, aby ustawić go na przycisku:

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(myKeyStroke, "actionName"); 
button.getActionMap().put("actionName", myAction); 

Gdzie myKeyStroke jest naciśnięciem klawisza, takiego jak F3, "actionName" jest etykietą (String), a myAction jest akcją, którą wywołuje.

Powiązane problemy