2010-12-14 45 views
7

Tengo un menú que creé usando JMenu. Quiero asignar una tecla de método abreviado Alt-F a este menú. Usé setMnemonic ('F') para hacer eso, pero el menú no reconoce el mnemónico.Java Swing JMenu Mnemonic

¿Cuál es la mejor manera de solucionar o solucionar este problema? Encuentro que establecer un punto de quiebre no ayuda mucho.

Gracias.

Fragmento de código:

//higher up in variable declaration 
/** Menus on the menu bar */ 
private JMenu uiFindMnu   = new JMenu("Find"); 
... 
//inside the constructor 
// set mnemonic for the Find menu 
uiFindMnu.setMnemonic('F'); 
+0

Creo que vamos a tener que ver algo de código. –

+0

¿Por qué alguien habría votado esta pregunta? Esto es básico. Todo lo que el afiche tiene que hacer es leer la API de JMenu para encontrar un enlace al tutorial de Swing sobre "Cómo usar los menús" para un ejemplo de trabajo. ¿Por qué recompensar a las personas con puntos por ser flojos? No solo eso sin un SSCCE estamos perdiendo el tiempo adivinando qué pudo haber hecho mal el póster, por lo que la pregunta ni siquiera es una pregunta completa. – camickr

+1

Encontré que JMenu Mnemonic se comporta de manera diferente en comparación con un botón mnemónico. Cuando quiero hacer clic en un botón con mnemónico, puedo simplemente presionar Alt seguir por la letra de acceso directo. Con JMenu, tengo que: presionar el botón Alt, esperar que Swing resalte el primer menú, usar la tecla de flecha para elegir otro menú o presionar los atajos de teclado correspondientes para seleccionar el menú. – zfranciscus

Respuesta

1

Uso setMnemonic(KeyEvent.VK_F);

recomiendo que lea este sobre JMenus: Howto use Menus

He aquí un extracto de este artículo: el apoyo

Menús dos tipos de alternativas de teclado: mnemonics y aceleradores. Los mnemotécnicos ofrecen una forma de utilizar el teclado para navegar por la jerarquía del menú , aumentando el acceso a los programas. Los aceleradores, por otro lado, ofrecen atajos de teclado para eludir navegando por la jerarquía del menú. Los mnemónicos son para todos los usuarios; aceleradores son para usuarios avanzados.

Un mnemotécnico es una tecla que hace que se seleccione un elemento de menú ya visible. Por ejemplo, en MenúDemo el primer menú tiene el mnemónico A, y su segundo elemento de menú tiene el mnemónico B. Esto significa que, cuando ejecuta MenuDemo con el aspecto y tacto de Java, al presionar las teclas Alt y A hace primer menú aparece. Mientras el primer menú está visible, presionando la tecla B (con o sin Alt) hace que se elija el segundo elemento del menú. Un elemento del menú generalmente muestra su mnemónico al subrayar la primera aparición del carácter mnemónico en el texto del elemento del menú , como se muestra en la siguiente instantánea . B es el carácter mnemónico de este menú elemento

Puede especificar un mnemónico al construir la opción de menú o con el método setMnemonic. Estos son ejemplos de ajuste de la mnemotécnica y aceleradores:

//Setting the mnemonic when constructing a menu item: 
menuItem = new JMenuItem("A text-only menu item", 
         KeyEvent.VK_T); 

//Setting the mnemonic after creation time: 
menuItem.setMnemonic(KeyEvent.VK_T); 

Como se puede ver, se establece una regla mnemotécnica especificando la constante KeyEvent correspondiente a la tecla que el usuario debe prensa.

+0

Lo intentaré y les contaré a todos el resultado – zfranciscus

+0

@zfranciscus Edité mi publicación con un enlace que explica todo lo que necesitas saber sobre JMenus :) – LaGrandMere

5

Dentro de un constructor de la clase (que se extiende JFrame):

JMenu helpmenu = new JMenu("File"); 
helpmenu.setMnemonic('F'); 
JMenuBar menubar = new JMenuBar(); 
menubar.add(helpmenu); 
setJMenuBar(menubar); 

Eso funcionó bien para mí. Tendrás que dar más detalles sobre tu código para que pueda dar una mejor respuesta. En cuanto a la resolución de problemas de SWING o cualquier GUI de aplicaciones, una de las mejores recomendaciones que puedo dar es crear el escenario más simple posible. Guardo una plantilla JFrame escueta alrededor de la cual puedo arrojar un código simple como este para probar. Una vez que sepa que funciona en el escenario más simple, puede retroceder a su proyecto y descubrir qué otra parte de su GUI está causando un conflicto con esta funcionalidad.

Solo por curiosidad, no tienes una variable local llamada 'uiFindMnu' en tu Constructor que esconde tu variable de clase, ¿o sí? Verificaría dos veces para asegurarme de que la variable a la que llama setMnemonic() es la que se agrega a su MenuBar (y que realmente se muestra).

+0

Gracias ha sido realmente útil – zfranciscus

+0

Buena respuesta, pero es [no una buena idea] (http://stackoverflow.com/q/1143923/439793) para "extender (ing) JFrame" –

2

Sufrió con un problema similar y se dio cuenta de que debido a la configuración de La apariencia después de inicializar los componentes causó el problema. Volteó las declaraciones y funcionó.

publicado una entrada en el blog here