2010-03-02 31 views
7

Ad esempio, supponiamo di disporre di una serie di pulsanti stile barra degli strumenti nella parte superiore della finestra principale dell'applicazione. Voglio associare un messaggio mnemonico a uno di questi è solo un singolo tasto, come F3.Java Swing: Posso impostare un tasto mnemonico che non richiede la pressione di alt?

Quando si imposta il mnemonico su KeyEvent.VK_F3, l'utente deve premere Alt + F3.

Se si dispone di una voce di menu, è possibile impostare un acceleratore, piuttosto che un mnemonico, e scegliere se utilizzare un tasto meta. I pulsanti non ti consentono di impostare un acceleratore, tuttavia.

C'è un modo per girare la meta-chiave per i pulsanti mnemonici?

risposta

4

Actions può associare un pezzo di codice a una voce di menu, una sequenza di tasti, un pulsante e qualsiasi altra cosa che ti interessa.

In generale, non pensare al codice come legato a un keypress/evento specifico e non utilizzare classi interne anonime. Utilizza invece classi reali in cui il tuo codice può essere riutilizzato per diversi tipi di cose. Quel modello usato dalla classe Action fornisce alcuni buoni esempi di questo.

3

Ben dietro le quinte, indipendentemente dal fatto che si utilizzi un acceleratore o un comando mnemonico su un componente, il metodo creerà per voi un Key Binding.

Quindi non c'è nulla che impedisca di associare un KeyStroke e un'azione a qualsiasi componente che si desidera e creare manualmente il Key Binding. Può anche essere un componente che non ha il metodo setMNemonic (...).

0

Sei sicuro che gli acceleratori non possono essere definiti sui pulsanti se il pulsante è stato configurato utilizzando un'azione? (. So che questo era vero ad un certo punto, ma ho pensato che questo potrebbe essere diverso nelle versioni successive di Java)

In ogni caso, qui è un altro metodo per impostare su un tasto:

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

Dove myKeyStroke è una sequenza di tasti come F3, "actionName" è un'etichetta (String) e myAction è l'azione che richiama.

Problemi correlati