devxlogo

Controlling the cursor position in a TextField

Controlling the cursor position in a TextField

Question:
Is there a way to put the text editing cursor in a specific position, like at the end of the string, in a TextField?

Answer:
This is the sort of question people ask because they look at the javadocs for TextField, but don’t see a cursor placement method and give up. Whenever you look at the documentation for a class, you have to remember to look at the documentation for its parent classes also. More often than not, more general functionality isconcentrated in a common superclass that multiple subclasses inherit. In this case, the TextComponent class contains a setCaretPositionmethod that is inherited by both TextField and TextArea. Java is object-oriented after all! Unfortunately, you will find that setCaretPosition is not entirely useful for TextAreas, where you would prefer to set the position based on a row and column, and not anabsolute index. The following short example creates a TextField displaying a test string, and places the editing cursor in the middle of the string.

import java.awt.*;import java.awt.event.*;public final class TextFieldCursor {  public static void main(String[] args) {    Frame frame;    TextField textField;    WindowListener exitListener;    exitListener = new WindowAdapter() {      public void windowClosing(WindowEvent e) {	Window window = e.getWindow();	window.setVisible(false);	window.dispose();	System.exit(0);      }    };    textField = new TextField("01234567890123456789", 20);    frame = new Frame();    frame.add(textField);    frame.addWindowListener(exitListener);    frame.pack();    // Set the caret position to        the middle of the string    // (after the first 9).       You can only do this after the    // TextField's peer has been created,       so you have to do    // it after packing the frame.    textField.setCaretPosition(10);    frame.setVisible(true);  }}

devx-admin

Share the Post: