001 package org.openstreetmap.josm.tools; 002 003 import java.awt.event.InputEvent; 004 import java.awt.event.KeyEvent; 005 import javax.swing.Action; 006 import javax.swing.InputMap; 007 import javax.swing.JButton; 008 import javax.swing.JComponent; 009 import javax.swing.KeyStroke; 010 import javax.swing.SwingUtilities; 011 012 /** 013 * Tools to work with Swing InputMap 014 * 015 */ 016 public class InputMapUtils { 017 public static void unassignCtrlShiftUpDown(JComponent cmp, int condition) { 018 InputMap inputMap=SwingUtilities.getUIInputMap(cmp, condition); 019 inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP,InputEvent.CTRL_MASK|InputEvent.SHIFT_MASK)); 020 inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,InputEvent.CTRL_MASK|InputEvent.SHIFT_MASK)); 021 inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP,InputEvent.ALT_MASK|InputEvent.SHIFT_MASK)); 022 inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,InputEvent.ALT_MASK|InputEvent.SHIFT_MASK)); 023 SwingUtilities.replaceUIInputMap(cmp,JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT,inputMap); 024 } 025 026 027 /** 028 * Enable activating button on Enter (which is replaced with spacebar for certain Look-And-Feels) 029 */ 030 public static void enableEnter(JButton b) { 031 b.setFocusable(true); 032 b.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter"); 033 b.getActionMap().put("enter",b.getAction()); 034 } 035 036 public static void addEnterAction(JComponent c, Action a) { 037 c.getActionMap().put("enter", a); 038 c.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter"); 039 } 040 041 public static void addSpacebarAction(JComponent c, Action a) { 042 c.getActionMap().put("spacebar", a); 043 c.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "spacebar"); 044 } 045 046 }