2010-03-02 9 views
7

Por ejemplo, supongamos que tengo una serie de botones estilo barra de herramientas en la parte superior de la ventana principal de mi aplicación. Quiero adjuntar un mnemotécnico a uno de estos que es solo una pulsación de tecla, como F3.Java Swing: ¿Puedo establecer un botón mnemónico que no requiera presionar alt?

Cuando configura el mnemónico en KeyEvent.VK_F3, el usuario tiene que presionar Alt + F3.

Si tiene un elemento de menú, puede establecer un acelerador, en lugar de un mnemónico, y elegir si desea usar una tecla meta. Sin embargo, los botones no te permiten configurar un acelerador.

¿Hay alguna forma de activar la tecla meta para teclas de acceso rápido?

Respuesta

4

Actions puede vincular un fragmento de código a un elemento de menú, una pulsación de tecla, un botón y cualquier otra cosa que le interese.

En general, no piense que su código está relacionado con un evento o pulsación de tecla específica, y no use clases internas anónimas. En su lugar, use clases reales en las que su código se pueda reutilizar para diferentes tipos de cosas. El patrón utilizado por la clase Acción ofrece algunos buenos ejemplos de esto.

3

Bien detrás de escena, ya sea que use un acelerador o un mnemónico en un componente, el método creará un Key Binding para usted.

Por lo tanto, no hay nada que le impida vincular un KeyStroke y Action al componente que desee y crear manualmente el enlace de clave. Incluso puede ser un componente que no tenga el método setMNemonic (...).

0

¿Está seguro de que los aceleradores no se pueden definir en los botones si el botón se configuró utilizando una Acción? (. Sé que esto era cierto en un momento dado, pero pensé que esto puede ser diferente en versiones posteriores de Java)

En cualquier caso, aquí es otro método para configurarlo en un botón:

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

Donde myKeyStroke es una pulsación de tecla como F3, "actionName" es una etiqueta (String) y myAction es la acción que invoca.

Cuestiones relacionadas