Java Swing: Ctrl + F1 no funciona globalmente, pero sí una combinación de teclas
Pregunta
Tengo una interfaz gráfica de usuario con un panel con pestañas en el norte. Varios eventos clave se agregan a su mapa de entrada:
InputMap paneInputMap = pane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_E, KeyEvent.CTRL_MASK ), "finish");
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_F1, KeyEvent.CTRL_MASK ), "toggletoolbar");
Si el panel de pestañas u otro botón en una barra de herramientas tiene el foco, Ctrl + F1 no tiene ninguna función. Si se enfoca otro componente (por ejemplo, JTree), Ctrl + F1 ejecuta la acción.
El problema es que funciona en todas partes si cambio el código clave a, por ejemplo. VK_F2
.
La tecla F1 no se usa en ningún otro lugar del programa.
¿Alguna idea?
Gracias, André
Editar: Una búsqueda de texto completo en el código fuente de Java dio la respuesta: ToolTipManager
registra la clave Ctrl + F1 para mostrar el texto de información sobre herramientas si se presiona la combinación de teclas. Entonces, si un botón con una información sobre herramientas está enfocado, Ctrl + F1 es manejado por el ToolTipManager
. De lo contrario mi acción es llamada.
Solución
Para que esto obtenga una respuesta, aquí está la solución copiada de su edición en la pregunta. ;-)
El ToolTipManager registra la clave Ctrl + F1 para mostrar el texto de información sobre herramientas si Se presiona la combinación de teclas. Así que si un botón con una información sobre herramientas está enfocado, Ctrl + F1 es manejado por el ToolTipManager. De lo contrario mi accion es llamado.
Otros consejos
¿Puede ser que el sistema operativo vuelva a configurar la tecla F1 ? Instale una escucha de clave y vea qué eventos se manejan.
BTW: Te ayudaría si pudieras editar tu pregunta e insertar un código comprobable.