// start with a simple JTextArea, get its Keymap to use as our parent,
// and create a new map called "KeymapExampleMap"
JTextArea area = new JTextArea(6, 32);
Keymap parent = area.getKeymap();
Keymap newmap = JTextComponent.addKeymap("KeymapExampleMap", parent);
// add CTRL-U: change current word to upper case (our own action)
KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK);
Action actionU = new UpWord(); // an inner class (defined below)
newmap.addActionForKeyStroke(u, actionU);
// get all the actions JTextArea provides for us
Action actionList[] = area.getActions();
// put them in a Hashtable so we can retreive them by Action.NAME
Hashtable lookup = new Hashtable();
for (int j=0; j < actionList.length; j+=1)
lookup.put(actionList[j].getValue(Action.NAME), actionList[j]);
// add CTRL-L: select current line (action provided for us)
KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK);
Action actionL = (Action)lookup.get(DefaultEditorKit.selectLineAction);
newmap.addActionForKeyStroke(L, actionL);
// add CTRL-W: select current word (action provided for us)
KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK);
Action actionW = (Action)lookup.get(DefaultEditorKit.selectWordAction);
newmap.addActionForKeyStroke(W, actionW);
// set the JTextArea's Keymap to be our new map
area.setKeymap(newmap);
// show the TextPane
JFrame f = new JFrame("KeymapExample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
area.setText("This is the story\nof the hare who\nlost his spectacles.");
f.pack();
f.setVisible(true);