Originariamente inviato da JunkyFunki
ho provato con im.clear() prima dei metodi put ma non funziona
Sì non funziona ma per un motivo molto semplice. Quella InputMap ottenuta con getInputMap() in realtà inizialmente è vuota.

Ogni InputMap può avere opzionalmente una InputMap "parent" (vedi getParent() ). E Swing si basa molto su questo sistema di "parentela" delle InputMap. Certe categorie di componenti condividono una InputMap comune e "standard" che contiene dei key binding di "base". Le 3 InputMap che si possono ottenere da getInputMap() sono inizialmente vuote ma hanno come parent quella "base". Quindi in questo modo è facile aggiungere dei key binding specifici per un componente ma senza dover andare a toccare quella "base".

Il problema è togliere dei key binding. O vai nella InputMap parent e togli i key binding per TAB/frecce o nella InputMap specifica aggiungi dei key binding per TAB/frecce che hanno una Action che non fa una mazza.

Adesso ci penso un attimo e vedo cosa è meglio fare.