Originariamente inviato da Mr.Bloom
Come posso mappare un tasto qualsiasi della tastiera con un jbutton.
quello che voglio ottenere è che quando premo il tasto il jbutton appare premuto, e
quando lo rilascio il jbutton viene rilasciato.
Dipende da dove deve essere il "focus". Se il tasto deve avere effetto solo se il focus è sul pulsante, oppure se deve avere effetto se il focus è su un qualunque componente nella finestra. Sono due cose differenti, anche se a livello di codice cambia davvero poco:
codice:
InputMap im = tuoPulsante.getInputMap(JComponent.WHEN_FOCUSED);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, 0, false), "pressed");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, 0, true), "released");
La pressione/rilascio del tasto 'X' viene mappata sulle chiavi "pressed"/"released" (queste chiavi sono usate poi nelle ActionMap ... ma non è importante per capire il codice sopra), solo per il tuoPulsante.
Con WHEN_FOCUSED vale solo se il focus è sul pulsante. Se vuoi che abbia effetto anche se il focus non è sul pulsante (dovunque purché nella stessa finestra), allore devi mettere WHEN_IN_FOCUSED_WINDOW. Come vedi a livello pratico cambia poco.