Swing Java: Ctrl + F1 non funziona a livello globale, ma a vicenda combinazione di tasti
Domanda
Ho una interfaccia grafica con un riquadro a schede a nord. Diversi eventi chiave vengono aggiunti alla sua mappa di input:
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");
Se il riquadro a schede o un altro pulsante in una barra degli strumenti ha lo stato attivo, Ctrl + F1 non ha alcuna funzione. Se un altro componente è focalizzato (ad es. JTree), Ctrl + F1 esegue l'azione.
Il problema è che funziona ovunque se cambio il Keycode in ad es. VK_F2
.
La chiave F1 non viene utilizzata in nessun'altra parte del programma.
Qualche idea?
Grazie, André
Modifica: Una ricerca full-text nel codice sorgente Java ha dato la risposta: ToolTipManager
registra la chiave Ctrl + F1 per visualizzare il testo della descrizione comandi se viene premuta la combinazione di tasti. Pertanto, se un pulsante con una descrizione comandi è attivo, Ctrl + F1 viene gestito da ToolTipManager
. Altrimenti viene chiamata la mia azione.
Soluzione
Per ottenere una risposta, ecco la soluzione copiata dalla tua modifica nella domanda. ; -)
ToolTipManager registra la chiave Ctrl + F1 per visualizzare il testo della descrizione comandi se viene premuta la combinazione di tasti. Quindi se un pulsante con una descrizione comandi è focalizzato, Ctrl + F1 è gestito da ToolTipManager. Altrimenti la mia azione è chiamato.
Altri suggerimenti
È possibile che il sistema operativo esegua il retarget della chiave F1 ? Installa un listener di chiavi e vedi quali eventi sono gestiti.
A proposito: sarebbe utile se tu potessi modificare la tua domanda e inserire un codice testabile.