JTextArea comp = new JTextArea(); // Bind F2 to the lowercase action String actionName = "Lowercase"; comp.getInputMap().put(KeyStroke.getKeyStroke("F2"), actionName); // Install the action comp.getActionMap().put(actionName, new TextAction(actionName) { public void actionPerformed(ActionEvent evt) { lowercaseSelection(getTextComponent(evt)); } } ); public static void lowercaseSelection(JTextComponent comp) { if (comp.getSelectionStart() == comp.getSelectionEnd()) { // There is no selection, only a caret if (comp.getCaretPosition() < comp.getDocument().getLength()) { // The caret must be at least one position left of the end try { int pos = comp.getCaretPosition(); Document doc = comp.getDocument(); String str = doc.getText(pos, 1).toLowerCase(); doc.remove(pos, 1); doc.insertString(pos, str, null); comp.moveCaretPosition(pos+1); } catch (BadLocationException e) { } } } else { // There is a selection int s = comp.getSelectionStart(); int e = comp.getSelectionEnd(); comp.replaceSelection(comp.getSelectedText().toLowerCase()); comp.select(s, e); } }