FileDocCategorySizeDatePackage
JTextComponent.javaAPI DocJava SE 5 API131082Fri Aug 26 14:58:16 BST 2005javax.swing.text

JTextComponent

public abstract class JTextComponent extends JComponent implements Scrollable, Accessible
JTextComponent is the base class for swing text components. It tries to be compatible with the java.awt.TextComponent class where it can reasonably do so. Also provided are other services for additional flexibility (beyond the pluggable UI and bean support). You can find information on how to use the functionality this class provides in General Rules for Using Text Components, a section in The Java Tutorial.

Caret Changes
The caret is a pluggable object in swing text components. Notification of changes to the caret position and the selection are sent to implementations of the CaretListener interface that have been registered with the text component. The UI will install a default caret unless a customized caret has been set.
By default the caret tracks all the document changes performed on the Event Dispatching Thread and updates it's position accordingly if an insertion occurs before or at the caret position or a removal occurs before the caret position. DefaultCaret tries to make itself visible which may lead to scrolling of a text component within JScrollPane. The default caret behavior can be changed by the {@link DefaultCaret#setUpdatePolicy} method.
Note: Non-editable text components also have a caret though it may not be painted.

Commands
Text components provide a number of commands that can be used to manipulate the component. This is essentially the way that the component expresses its capabilities. These are expressed in terms of the swing Action interface, using the TextAction implementation. The set of commands supported by the text component can be found with the {@link #getActions} method. These actions can be bound to key events, fired from buttons, etc.

Text Input
The text components support flexible and internationalized text input, using keymaps and the input method framework, while maintaining compatibility with the AWT listener model.

A {@link javax.swing.text.Keymap} lets an application bind key strokes to actions. In order to allow keymaps to be shared across multiple text components, they can use actions that extend TextAction. TextAction can determine which JTextComponent most recently has or had focus and therefore is the subject of the action (In the case that the ActionEvent sent to the action doesn't contain the target text component as its source).

The input method framework lets text components interact with input methods, separate software components that preprocess events to let users enter thousands of different characters using keyboards with far fewer keys. JTextComponent is an active client of the framework, so it implements the preferred user interface for interacting with input methods. As a consequence, some key events do not reach the text component because they are handled by an input method, and some text input reaches the text component as committed text within an {@link java.awt.event.InputMethodEvent} instead of as a key event. The complete text input is the combination of the characters in keyTyped key events and committed text in input method events.

The AWT listener model lets applications attach event listeners to components in order to bind events to actions. Swing encourages the use of keymaps instead of listeners, but maintains compatibility with listeners by giving the listeners a chance to steal an event by consuming it.

Keyboard event and input method events are handled in the following stages, with each stage capable of consuming the event:

Stage

KeyEvent

InputMethodEvent

1. input methods (generated here)
2. focus manager
3. registered key listeners registered input method listeners
4. input method handling in JTextComponent
5. keymap handling using the current keymap
6. keyboard handling in JComponent (e.g. accelerators, component navigation, etc.)

To maintain compatibility with applications that listen to key events but are not aware of input method events, the input method handling in stage 4 provides a compatibility mode for components that do not process input method events. For these components, the committed text is converted to keyTyped key events and processed in the key event pipeline starting at stage 3 instead of in the input method event pipeline.

By default the component will create a keymap (named DEFAULT_KEYMAP) that is shared by all JTextComponent instances as the default keymap. Typically a look-and-feel implementation will install a different keymap that resolves to the default keymap for those bindings not found in the different keymap. The minimal bindings include:

  • inserting content into the editor for the printable keys.
  • removing content with the backspace and del keys.
  • caret movement forward and backward

Model/View Split
The text components have a model-view split. A text component pulls together the objects used to represent the model, view, and controller. The text document model may be shared by other views which act as observers of the model (e.g. a document may be shared by multiple components).

Diagram showing interaction between Controller, Document, events, and ViewFactory

The model is defined by the {@link Document} interface. This is intended to provide a flexible text storage mechanism that tracks change during edits and can be extended to more sophisticated models. The model interfaces are meant to capture the capabilities of expression given by SGML, a system used to express a wide variety of content. Each modification to the document causes notification of the details of the change to be sent to all observers in the form of a {@link DocumentEvent} which allows the views to stay up to date with the model. This event is sent to observers that have implemented the {@link DocumentListener} interface and registered interest with the model being observed.

Location Information
The capability of determining the location of text in the view is provided. There are two methods, {@link #modelToView} and {@link #viewToModel} for determining this information.

Undo/Redo support
Support for an edit history mechanism is provided to allow undo/redo operations. The text component does not itself provide the history buffer by default, but does provide the UndoableEdit records that can be used in conjunction with a history buffer to provide the undo/redo support. The support is provided by the Document model, which allows one to attach UndoableEditListener implementations.

Thread Safety
The swing text components provide some support of thread safe operations. Because of the high level of configurability of the text components, it is possible to circumvent the protection provided. The protection primarily comes from the model, so the documentation of AbstractDocument describes the assumptions of the protection provided. The methods that are safe to call asynchronously are marked with comments.

Newlines
For a discussion on how newlines are handled, see DefaultEditorKit.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see {@link java.beans.XMLEncoder}.

beaninfo
attribute: isContainer false
author
Timothy Prinzing
version
1.212 04/15/04
see
Document
see
DocumentEvent
see
DocumentListener
see
Caret
see
CaretEvent
see
CaretListener
see
TextUI
see
View
see
ViewFactory

Fields Summary
public static final String
FOCUS_ACCELERATOR_KEY
The bound property name for the focus accelerator.
private Document
model
The document model.
private transient Caret
caret
The caret used to display the insert position and navigate throughout the document. PENDING(prinz) This should be serializable, default installed by UI.
private NavigationFilter
navigationFilter
Object responsible for restricting the cursor navigation.
private transient Highlighter
highlighter
The object responsible for managing highlights. PENDING(prinz) This should be serializable, default installed by UI.
private transient Keymap
keymap
The current key bindings in effect. PENDING(prinz) This should be serializable, default installed by UI.
private transient MutableCaretEvent
caretEvent
private Color
caretColor
private Color
selectionColor
private Color
selectedTextColor
private Color
disabledTextColor
private boolean
editable
private Insets
margin
private char
focusAccelerator
private boolean
dragEnabled
private static DefaultTransferHandler
defaultTransferHandler
TransferHandler used if one hasn't been supplied by the UI.
private static Map
overrideMap
Maps from class name to Boolean indicating if processInputMethodEvent has been overriden.
private static final Object
KEYMAP_TABLE
private JTextComponent
editor
private transient InputMethodRequests
inputMethodRequestsHandler
private SimpleAttributeSet
composedTextAttribute
private String
composedTextContent
private Position
composedTextStart
private Position
composedTextEnd
private Position
latestCommittedTextStart
private Position
latestCommittedTextEnd
private ComposedTextCaret
composedTextCaret
private transient Caret
originalCaret
private boolean
checkedInputOverride
Set to true after the check for the override of processInputMethodEvent has been checked.
private boolean
needToSendKeyTypedEvent
private static final Object
FOCUSED_COMPONENT
public static final String
DEFAULT_KEYMAP
The default keymap that will be shared by all JTextComponent instances unless they have had a different keymap set.
Constructors Summary
public JTextComponent()
Creates a new JTextComponent. Listeners for caret events are established, and the pluggable UI installed. The component is marked as editable. No layout manager is used, because layout is managed by the view subsystem of text. The document model is set to null.

        super();
	// enable InputMethodEvent for on-the-spot pre-editing
	enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.INPUT_METHOD_EVENT_MASK);
        caretEvent = new MutableCaretEvent(this);
        addMouseListener(caretEvent);
        addFocusListener(caretEvent);
        setEditable(true);
	setDragEnabled(false);
        setLayout(null); // layout is managed by View hierarchy
        updateUI();
    
Methods Summary
public voidaddCaretListener(javax.swing.event.CaretListener listener)
Adds a caret listener for notification of any changes to the caret.

param
listener the listener to be added
see
javax.swing.event.CaretEvent

        listenerList.add(CaretListener.class, listener);
    
public voidaddInputMethodListener(java.awt.event.InputMethodListener l)

    	super.addInputMethodListener(l);
	if (l != null) {
	    needToSendKeyTypedEvent = false;
            checkedInputOverride = true;
	}
    
public static javax.swing.text.KeymapaddKeymap(java.lang.String nm, javax.swing.text.Keymap parent)
Adds a new keymap into the keymap hierarchy. Keymap bindings resolve from bottom up so an attribute specified in a child will override an attribute specified in the parent.

param
nm the name of the keymap (must be unique within the collection of named keymaps in the document); the name may be null if the keymap is unnamed, but the caller is responsible for managing the reference returned as an unnamed keymap can't be fetched by name
param
parent the parent keymap; this may be null if unspecified bindings need not be resolved in some other keymap
return
the keymap

        Keymap map = new DefaultKeymap(nm, parent); 
        if (nm != null) {
            // add a named keymap, a class of bindings
            getKeymapTable().put(nm, map);
        }
        return map;
    
booleancomposedTextExists()

	return (composedTextStart != null);
    
public voidcopy()
Transfers the currently selected range in the associated text model to the system clipboard, leaving the contents in the text model. The current selection remains intact. Does nothing for null selections.

see
java.awt.Toolkit#getSystemClipboard
see
java.awt.datatransfer.Clipboard

        invokeAction("copy", TransferHandler.getCopyAction());
    
private voidcreateComposedTextAttribute(int composedIndex, java.text.AttributedCharacterIterator text)

	Document doc = getDocument();
        StringBuffer strBuf = new StringBuffer();

	// create attributed string with no attributes
	for (char c = text.setIndex(composedIndex); 
             c != CharacterIterator.DONE; c = text.next()) {
	    strBuf.append(c);
	}
	
	composedTextContent = new String(strBuf);	
	composedTextAttribute = new SimpleAttributeSet();	
	composedTextAttribute.addAttribute(StyleConstants.ComposedTextAttribute, 
		new AttributedString(text, composedIndex, text.getEndIndex()));
    
public voidcut()
Transfers the currently selected range in the associated text model to the system clipboard, removing the contents from the model. The current selection is reset. Does nothing for null selections.

see
java.awt.Toolkit#getSystemClipboard
see
java.awt.datatransfer.Clipboard

	if (isEditable() && isEnabled()) {
            invokeAction("cut", TransferHandler.getCutAction());
	}
    
private voidexchangeCaret(javax.swing.text.Caret oldCaret, javax.swing.text.Caret newCaret)

	int blinkRate = oldCaret.getBlinkRate();
	setCaret(newCaret);
	caret.setBlinkRate(blinkRate);
	caret.setVisible(hasFocus());
    
protected voidfireCaretUpdate(javax.swing.event.CaretEvent e)
Notifies all listeners that have registered interest for notification on this event type. The event instance is lazily created using the parameters passed into the fire method. The listener list is processed in a last-to-first manner.

param
e the event
see
EventListenerList

        // Guaranteed to return a non-null array
        Object[] listeners = listenerList.getListenerList();
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for (int i = listeners.length-2; i>=0; i-=2) {
            if (listeners[i]==CaretListener.class) {
                ((CaretListener)listeners[i+1]).caretUpdate(e);
            }
        }
    
public javax.accessibility.AccessibleContextgetAccessibleContext()
Gets the AccessibleContext associated with this JTextComponent. For text components, the AccessibleContext takes the form of an AccessibleJTextComponent. A new AccessibleJTextComponent instance is created if necessary.

return
an AccessibleJTextComponent that serves as the AccessibleContext of this JTextComponent

        if (accessibleContext == null) {
            accessibleContext = new AccessibleJTextComponent();
        }
        return accessibleContext;
    
public javax.swing.Action[]getActions()
Fetches the command list for the editor. This is the list of commands supported by the plugged-in UI augmented by the collection of commands that the editor itself supports. These are useful for binding to events, such as in a keymap.

return
the command list

      
        return getUI().getEditorKit(this).getActions(); 
    
public javax.swing.text.CaretgetCaret()
Fetches the caret that allows text-oriented navigation over the view.

return
the caret

        return caret;
    
public java.awt.ColorgetCaretColor()
Fetches the current color used to render the caret.

return
the color

        return caretColor;
    
public javax.swing.event.CaretListener[]getCaretListeners()
Returns an array of all the caret listeners registered on this text component.

return
all of this component's CaretListeners or an empty array if no caret listeners are currently registered
see
#addCaretListener
see
#removeCaretListener
since
1.4

        return (CaretListener[])listenerList.getListeners(CaretListener.class);
    
public intgetCaretPosition()
Returns the position of the text insertion caret for the text component.

return
the position of the text insertion caret for the text component >= 0

        return caret.getDot();
    
private intgetCurrentEventModifiers()

        int modifiers = 0;
        AWTEvent currentEvent = EventQueue.getCurrentEvent();
        if (currentEvent instanceof InputEvent) {
            modifiers = ((InputEvent)currentEvent).getModifiers();
        } else if (currentEvent instanceof ActionEvent) {
            modifiers = ((ActionEvent)currentEvent).getModifiers();
        }
        return modifiers;
    
public java.awt.ColorgetDisabledTextColor()
Fetches the current color used to render the selected text.

return
the color

        return disabledTextColor;
    
public javax.swing.text.DocumentgetDocument()
Fetches the model associated with the editor. This is primarily for the UI to get at the minimal amount of state required to be a text editor. Subclasses will return the actual type of the model which will typically be something that extends Document.

return
the model

        return model;
    
public booleangetDragEnabled()
Gets the dragEnabled property.

return
the value of the dragEnabled property
see
#setDragEnabled
since
1.4

	return dragEnabled;
    
public chargetFocusAccelerator()
Returns the key accelerator that will cause the receiving text component to get the focus. Return '\0' if no focus accelerator has been set.

return
the key

        return focusAccelerator;
    
static final javax.swing.text.JTextComponentgetFocusedComponent()
Returns the JTextComponent that most recently had focus. The returned value may currently have focus.

        return (JTextComponent)AppContext.getAppContext().
            get(FOCUSED_COMPONENT);
    
public javax.swing.text.HighlightergetHighlighter()
Fetches the object responsible for making highlights.

return
the highlighter

        return highlighter;
    
public java.awt.im.InputMethodRequestsgetInputMethodRequests()

    	if (inputMethodRequestsHandler == null) {
	    inputMethodRequestsHandler = 
	        (InputMethodRequests)new InputMethodRequestsHandler();
	    Document doc = getDocument();
	    if (doc != null) {
		doc.addDocumentListener((DocumentListener)inputMethodRequestsHandler);
	    }
	}

	return inputMethodRequestsHandler;
    
public javax.swing.text.KeymapgetKeymap()
Fetches the keymap currently active in this text component.

return
the keymap

        return keymap;
    
public static javax.swing.text.KeymapgetKeymap(java.lang.String nm)
Fetches a named keymap previously added to the document. This does not work with null-named keymaps.

param
nm the name of the keymap
return
the keymap

        return getKeymapTable().get(nm);
    
private static java.util.HashMapgetKeymapTable()

        AppContext appContext = AppContext.getAppContext();
        HashMap<String,Keymap> keymapTable = 
            (HashMap<String,Keymap>)appContext.get(KEYMAP_TABLE);
        if (keymapTable == null) {
            keymapTable = new HashMap<String,Keymap>(17);
            appContext.put(KEYMAP_TABLE, keymapTable);
            //initialize default keymap
            Keymap binding = addKeymap(DEFAULT_KEYMAP, null);
            binding.setDefaultAction(new 
                                     DefaultEditorKit.DefaultKeyTypedAction());
        }
        return keymapTable;
    
public java.awt.InsetsgetMargin()
Returns the margin between the text component's border and its text.

return
the margin

        return margin;
    
public javax.swing.text.NavigationFiltergetNavigationFilter()
Returns the NavigationFilter. NavigationFilter is used by DefaultCaret and the default cursor movement actions as a way to restrict the cursor movement. A null return value implies the cursor movement and selection should not be restricted.

since
1.4
return
the NavigationFilter

        return navigationFilter;
    
public java.awt.DimensiongetPreferredScrollableViewportSize()
Returns the preferred size of the viewport for a view component. This is implemented to do the default behavior of returning the preferred size of the component.

return
the preferredSize of a JViewport whose view is this Scrollable

        return getPreferredSize();
    
public intgetScrollableBlockIncrement(java.awt.Rectangle visibleRect, int orientation, int direction)
Components that display logical rows or columns should compute the scroll increment that will completely expose one block of rows or columns, depending on the value of orientation.

The default implementation of this is to simply return the visible area. Subclasses will likely be able to provide a much more reasonable value.

param
visibleRect the view area visible within the viewport
param
orientation either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL
param
direction less than zero to scroll up/left, greater than zero for down/right
return
the "block" increment for scrolling in the specified direction
exception
IllegalArgumentException for an invalid orientation
see
JScrollBar#setBlockIncrement

        switch(orientation) {
        case SwingConstants.VERTICAL:
            return visibleRect.height;
        case SwingConstants.HORIZONTAL:
            return visibleRect.width;
        default:
            throw new IllegalArgumentException("Invalid orientation: " + orientation);
        }
    
public booleangetScrollableTracksViewportHeight()
Returns true if a viewport should always force the height of this Scrollable to match the height of the viewport. For example a columnar text view that flowed text in left to right columns could effectively disable vertical scrolling by returning true here.

Scrolling containers, like JViewport, will use this method each time they are validated.

return
true if a viewport should force the Scrollables height to match its own

	if (getParent() instanceof JViewport) {
	    return (((JViewport)getParent()).getHeight() > getPreferredSize().height);
	}
	return false;
    
public booleangetScrollableTracksViewportWidth()
Returns true if a viewport should always force the width of this Scrollable to match the width of the viewport. For example a normal text view that supported line wrapping would return true here, since it would be undesirable for wrapped lines to disappear beyond the right edge of the viewport. Note that returning true for a Scrollable whose ancestor is a JScrollPane effectively disables horizontal scrolling.

Scrolling containers, like JViewport, will use this method each time they are validated.

return
true if a viewport should force the Scrollables width to match its own

	if (getParent() instanceof JViewport) {
	    return (((JViewport)getParent()).getWidth() > getPreferredSize().width);
	}
	return false;
    
public intgetScrollableUnitIncrement(java.awt.Rectangle visibleRect, int orientation, int direction)
Components that display logical rows or columns should compute the scroll increment that will completely expose one new row or column, depending on the value of orientation. Ideally, components should handle a partially exposed row or column by returning the distance required to completely expose the item.

The default implementation of this is to simply return 10% of the visible area. Subclasses are likely to be able to provide a much more reasonable value.

param
visibleRect the view area visible within the viewport
param
orientation either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL
param
direction less than zero to scroll up/left, greater than zero for down/right
return
the "unit" increment for scrolling in the specified direction
exception
IllegalArgumentException for an invalid orientation
see
JScrollBar#setUnitIncrement

        switch(orientation) {
        case SwingConstants.VERTICAL:
            return visibleRect.height / 10;
        case SwingConstants.HORIZONTAL:
            return visibleRect.width / 10;
        default:
            throw new IllegalArgumentException("Invalid orientation: " + orientation);
        }
    
public java.lang.StringgetSelectedText()
Returns the selected text contained in this TextComponent. If the selection is null or the document empty, returns null.

return
the text
exception
IllegalArgumentException if the selection doesn't have a valid mapping into the document for some reason
see
#setText

        String txt = null;
        int p0 = Math.min(caret.getDot(), caret.getMark());
        int p1 = Math.max(caret.getDot(), caret.getMark());
        if (p0 != p1) {
            try {
                Document doc = getDocument();
                txt = doc.getText(p0, p1 - p0);
            } catch (BadLocationException e) {
		throw new IllegalArgumentException(e.getMessage());
            }
        }
        return txt;
    
public java.awt.ColorgetSelectedTextColor()
Fetches the current color used to render the selected text.

return
the color

        return selectedTextColor;
    
public java.awt.ColorgetSelectionColor()
Fetches the current color used to render the selection.

return
the color

        return selectionColor;
    
public intgetSelectionEnd()
Returns the selected text's end position. Return 0 if the document is empty, or the value of dot if there is no selection.

return
the end position >= 0

        int end = Math.max(caret.getDot(), caret.getMark());
        return end;
    
public intgetSelectionStart()
Returns the selected text's start position. Return 0 for an empty document, or the value of dot if no selection.

return
the start position >= 0

        int start = Math.min(caret.getDot(), caret.getMark());
        return start;
    
public java.lang.StringgetText(int offs, int len)
Fetches a portion of the text represented by the component. Returns an empty string if length is 0.

param
offs the offset >= 0
param
len the length >= 0
return
the text
exception
BadLocationException if the offset or length are invalid

        return getDocument().getText(offs, len);
    
public java.lang.StringgetText()
Returns the text contained in this TextComponent. If the underlying document is null, will give a NullPointerException. Note that text is not a bound property, so no PropertyChangeEvent is fired when it changes. To listen for changes to the text, use DocumentListener.

return
the text
exception
NullPointerException if the document is null
see
#setText

        Document doc = getDocument();
        String txt;
        try {
            txt = doc.getText(0, doc.getLength());
        } catch (BadLocationException e) {
            txt = null;
        }
        return txt;
    
public java.lang.StringgetToolTipText(java.awt.event.MouseEvent event)
Returns the string to be used as the tooltip for event. This will return one of:
  1. If setToolTipText has been invoked with a non-null value, it will be returned, otherwise
  2. The value from invoking getToolTipText on the UI will be returned.
By default JTextComponent does not register itself with the ToolTipManager. This means that tooltips will NOT be shown from the TextUI unless registerComponent has been invoked on the ToolTipManager.

param
event the event in question
return
the string to be used as the tooltip for event
see
javax.swing.JComponent#setToolTipText
see
javax.swing.plaf.TextUI#getToolTipText
see
javax.swing.ToolTipManager#registerComponent

        String retValue = super.getToolTipText(event);

        if (retValue == null) {
            TextUI ui = getUI();
            if (ui != null) {
                retValue = ui.getToolTipText(this, new Point(event.getX(),
                                                             event.getY()));
            }
        }
        return retValue;
    
public javax.swing.plaf.TextUIgetUI()
Fetches the user-interface factory for this text-oriented editor.

return
the factory

 return (TextUI)ui; 
private voidinstallDefaultTransferHandlerIfNecessary()
If the current TransferHandler is null, this will install a new one.

        if (getTransferHandler() == null) {
            if (defaultTransferHandler == null) {
                defaultTransferHandler = new DefaultTransferHandler();
            }
            setTransferHandler(defaultTransferHandler);
        }
    
private voidinvokeAction(java.lang.String name, javax.swing.Action altAction)
This is a conveniance method that is only useful for cut, copy and paste. If an Action with the name name does not exist in the ActionMap, this will attemp to install a TransferHandler and then use altAction.

        ActionMap map = getActionMap();
        Action action = null;

        if (map != null) {
            action = map.get(name);
        }
        if (action == null) {
            installDefaultTransferHandlerIfNecessary();
            action = altAction;
        }
        action.actionPerformed(new ActionEvent(this,
                               ActionEvent.ACTION_PERFORMED, (String)action.
                               getValue(Action.NAME),
                               EventQueue.getMostRecentEventTime(),
                               getCurrentEventModifiers()));
    
public booleanisEditable()
Returns the boolean indicating whether this TextComponent is editable or not.

return
the boolean value
see
#setEditable

        return editable;
    
private static java.lang.BooleanisProcessInputMethodEventOverridden(java.lang.Class klass)
Returns true if klass is NOT a JTextComponent and it or one of its superclasses (stoping at JTextComponent) overrides processInputMethodEvent. It is assumed this will be invoked from within a doPrivileged, and it is also assumed klass extends JTextComponent.

        if (klass == JTextComponent.class) {
            return Boolean.FALSE;
        }
        Boolean retValue = (Boolean)overrideMap.get(klass.getName());

        if (retValue != null) {
            return retValue;
        }
        Boolean sOverriden = isProcessInputMethodEventOverridden(
                                       klass.getSuperclass());

        if (sOverriden.booleanValue()) {
            // If our superclass has overriden it, then by definition klass
            // overrides it.
            overrideMap.put(klass.getName(), sOverriden);
            return sOverriden;
        }
        // klass's superclass didn't override it, check for an override in
        // klass.
        try {
            Class[] classes = new Class[1];
            classes[0] = InputMethodEvent.class;

            Method m = klass.getDeclaredMethod("processInputMethodEvent",
                                               classes);
            retValue = Boolean.TRUE;
        } catch (NoSuchMethodException nsme) {
            retValue = Boolean.FALSE;
        }
        overrideMap.put(klass.getName(), retValue);
        return retValue;
    
private booleanisProcessInputMethodEventOverridden()

        if (overrideMap == null) {
            overrideMap = Collections.synchronizedMap(new HashMap());
        }
        Boolean retValue = (Boolean)overrideMap.get(getClass().getName());

        if (retValue != null) {
            return retValue.booleanValue();
        }
	Boolean ret = (Boolean)AccessController.doPrivileged(new
                       PrivilegedAction() {
            public Object run() {
                return isProcessInputMethodEventOverridden(
                                JTextComponent.this.getClass());
            }
        });

	return ret.booleanValue();
    
public static voidloadKeymap(javax.swing.text.Keymap map, javax.swing.text.JTextComponent$KeyBinding[] bindings, javax.swing.Action[] actions)

Loads a keymap with a bunch of bindings. This can be used to take a static table of definitions and load them into some keymap. The following example illustrates an example of binding some keys to the cut, copy, and paste actions associated with a JTextComponent. A code fragment to accomplish this might look as follows:



static final JTextComponent.KeyBinding[] defaultBindings = {
new JTextComponent.KeyBinding(
KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK),
DefaultEditorKit.copyAction),
new JTextComponent.KeyBinding(
KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK),
DefaultEditorKit.pasteAction),
new JTextComponent.KeyBinding(
KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK),
DefaultEditorKit.cutAction),
};

JTextComponent c = new JTextPane();
Keymap k = c.getKeymap();
JTextComponent.loadKeymap(k, defaultBindings, c.getActions());

The sets of bindings and actions may be empty but must be non-null.

param
map the keymap
param
bindings the bindings
param
actions the set of actions

        Hashtable h = new Hashtable();
        for (int i = 0; i < actions.length; i++) {
            Action a = actions[i];
            String value = (String)a.getValue(Action.NAME);
            h.put((value!=null ? value:""), a);
        }
        for (int i = 0; i < bindings.length; i++) {
            Action a = (Action) h.get(bindings[i].actionName);
            if (a != null) {
                map.addActionForKeyStroke(bindings[i].key, a);
            }
        }
    
private voidmapCommittedTextToAction(java.lang.String committedText)

        Keymap binding = getKeymap();
        if (binding != null) {
            Action a = null;
            if (committedText.length() == 1) {
		KeyStroke k = KeyStroke.getKeyStroke(committedText.charAt(0));
                a = binding.getAction(k);
	    }

	    if (a == null) { 
	        a = binding.getDefaultAction();
	    }

            if (a != null) {
                ActionEvent ae =
                    new ActionEvent(this, ActionEvent.ACTION_PERFORMED, 
                                    committedText,
                                    EventQueue.getMostRecentEventTime(),
                                    getCurrentEventModifiers());
                a.actionPerformed(ae);
            }
        }
    
public java.awt.RectanglemodelToView(int pos)
Converts the given location in the model to a place in the view coordinate system. The component must have a positive size for this translation to be computed (i.e. layout cannot be computed until the component has been sized). The component does not have to be visible or painted.

param
pos the position >= 0
return
the coordinates as a rectangle, with (r.x, r.y) as the location in the coordinate system, or null if the component does not yet have a positive size.
exception
BadLocationException if the given position does not represent a valid location in the associated document
see
TextUI#modelToView

        return getUI().modelToView(this, pos);
    
public voidmoveCaretPosition(int pos)
Moves the caret to a new position, leaving behind a mark defined by the last time setCaretPosition was called. This forms a selection. If the document is null, does nothing. The position must be between 0 and the length of the component's text or else an exception is thrown.

param
pos the position
exception
IllegalArgumentException if the value supplied for position is less than zero or greater than the component's text length
see
#setCaretPosition

        Document doc = getDocument();
        if (doc != null) {
            if (pos > doc.getLength() || pos < 0) {
                throw new IllegalArgumentException("bad position: " + pos);
            }
            caret.moveDot(pos);
        }
    
protected java.lang.StringparamString()
Returns a string representation of this JTextComponent. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be null.

Overriding paramString to provide information about the specific new aspects of the JFC components.

return
a string representation of this JTextComponent

        String editableString = (editable ?
				 "true" : "false");
        String caretColorString = (caretColor != null ?
				   caretColor.toString() : "");
        String selectionColorString = (selectionColor != null ?
				       selectionColor.toString() : "");
        String selectedTextColorString = (selectedTextColor != null ?
					  selectedTextColor.toString() : "");
        String disabledTextColorString = (disabledTextColor != null ?
					  disabledTextColor.toString() : "");
        String marginString = (margin != null ?
			       margin.toString() : "");

        return super.paramString() +
        ",caretColor=" + caretColorString +
        ",disabledTextColor=" + disabledTextColorString +
        ",editable=" + editableString +
        ",margin=" + marginString +
        ",selectedTextColor=" + selectedTextColorString +
        ",selectionColor=" + selectionColorString;
    
public voidpaste()
Transfers the contents of the system clipboard into the associated text model. If there is a selection in the associated view, it is replaced with the contents of the clipboard. If there is no selection, the clipboard contents are inserted in front of the current insert position in the associated view. If the clipboard is empty, does nothing.

see
#replaceSelection
see
java.awt.Toolkit#getSystemClipboard
see
java.awt.datatransfer.Clipboard

	if (isEditable() && isEnabled()) {
            invokeAction("paste", TransferHandler.getPasteAction());
	}
    
protected voidprocessInputMethodEvent(java.awt.event.InputMethodEvent e)

	// let listeners handle the events
	super.processInputMethodEvent(e);

	if (!e.isConsumed()) {
            if (! isEditable()) {
                return;
            } else {
  	        switch (e.getID()) {
		case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
		    replaceInputMethodText(e);

		    // fall through

		case InputMethodEvent.CARET_POSITION_CHANGED:
		    setInputMethodCaretPosition(e);
		    break;
		}
	    }

	    e.consume();
	}
    
public voidread(java.io.Reader in, java.lang.Object desc)
Initializes from a stream. This creates a model of the type appropriate for the component and initializes the model from the stream. By default this will load the model as plain text. Previous contents of the model are discarded.

param
in the stream to read from
param
desc an object describing the stream; this might be a string, a File, a URL, etc. Some kinds of documents (such as html for example) might be able to make use of this information; if non-null, it is added as a property of the document
exception
IOException as thrown by the stream being used to initialize
see
EditorKit#createDefaultDocument
see
#setDocument
see
PlainDocument

        EditorKit kit = getUI().getEditorKit(this);
        Document doc = kit.createDefaultDocument();
        if (desc != null) {
            doc.putProperty(Document.StreamDescriptionProperty, desc);
        }
        try {
            kit.read(in, doc, 0);
            setDocument(doc);
        } catch (BadLocationException e) {
            throw new IOException(e.getMessage());
        }
    
private voidreadObject(java.io.ObjectInputStream s)

        s.defaultReadObject();
        caretEvent = new MutableCaretEvent(this);
        addMouseListener(caretEvent);
        addFocusListener(caretEvent);
    
public voidremoveCaretListener(javax.swing.event.CaretListener listener)
Removes a caret listener.

param
listener the listener to be removed
see
javax.swing.event.CaretEvent

        listenerList.remove(CaretListener.class, listener);
    
public static javax.swing.text.KeymapremoveKeymap(java.lang.String nm)
Removes a named keymap previously added to the document. Keymaps with null names may not be removed in this way.

param
nm the name of the keymap to remove
return
the keymap that was removed

        return getKeymapTable().remove(nm);
    
public voidremoveNotify()

        super.removeNotify();
        if (getFocusedComponent() == this) {
            AppContext.getAppContext().remove(FOCUSED_COMPONENT);
        }
    
private voidreplaceInputMethodText(java.awt.event.InputMethodEvent e)

    	int commitCount = e.getCommittedCharacterCount();
	AttributedCharacterIterator text = e.getText();
	int composedTextIndex;

	// old composed text deletion
	Document doc = getDocument();
	if (composedTextExists()) {
	    try {	
	        doc.remove(composedTextStart.getOffset(), 
                           composedTextEnd.getOffset() - 
                           composedTextStart.getOffset());
	    } catch (BadLocationException ble) {}
	    composedTextStart = composedTextEnd = null;
	    composedTextAttribute = null;
	    composedTextContent = null;
	}
	
	if (text != null) {
	    text.first();
	    int committedTextStartIndex = 0;
	    int committedTextEndIndex = 0;

	    // committed text insertion
	    if (commitCount > 0) {
		// Remember latest committed text start index
		committedTextStartIndex = caret.getDot();

		// Need to generate KeyTyped events for the committed text for components
		// that are not aware they are active input method clients.
		if (shouldSynthensizeKeyEvents()) {
		    for (char c = text.current(); commitCount > 0; 
		         c = text.next(), commitCount--) {
			KeyEvent ke = new KeyEvent(this, KeyEvent.KEY_TYPED, 
						   EventQueue.getMostRecentEventTime(),
						   0, KeyEvent.VK_UNDEFINED, c);
			processKeyEvent(ke);
		    }
		} else {
		    StringBuffer strBuf = new StringBuffer();
		    for (char c = text.current(); commitCount > 0; 
		         c = text.next(), commitCount--) {
			strBuf.append(c);
		    }
		
		    // map it to an ActionEvent
		    mapCommittedTextToAction(new String(strBuf));
		}
		
		// Remember latest committed text end index 
		committedTextEndIndex = caret.getDot();
	    }

	    // new composed text insertion
	    composedTextIndex = text.getIndex();
	    if (composedTextIndex < text.getEndIndex()) {
		createComposedTextAttribute(composedTextIndex, text);
		try {	
		    replaceSelection(null);
		    doc.insertString(caret.getDot(), composedTextContent, 
		    			composedTextAttribute);
		    composedTextStart = doc.createPosition(caret.getDot() -
						composedTextContent.length());
                    composedTextEnd = doc.createPosition(caret.getDot());
		} catch (BadLocationException ble) {
	            composedTextStart = composedTextEnd = null;
	            composedTextAttribute = null;
	            composedTextContent = null;
		}	
	    }

	    // Save the latest committed text information
	    if (committedTextStartIndex != committedTextEndIndex) {
		try {	
		    latestCommittedTextStart = doc.
                        createPosition(committedTextStartIndex);
                    latestCommittedTextEnd = doc.
                        createPosition(committedTextEndIndex);
		} catch (BadLocationException ble) {
		    latestCommittedTextStart = 
                        latestCommittedTextEnd = null;
		}
	    } else {
		latestCommittedTextStart = 
                    latestCommittedTextEnd = null;
	    }
	}
    
public voidreplaceSelection(java.lang.String content)
Replaces the currently selected content with new content represented by the given string. If there is no selection this amounts to an insert of the given text. If there is no replacement text this amounts to a removal of the current selection.

This is the method that is used by the default implementation of the action for inserting content that gets bound to the keymap actions.

This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information.

param
content the content to replace the selection with

        Document doc = getDocument();
        if (doc != null) {
            try {
		boolean composedTextSaved = saveComposedText(caret.getDot());
                int p0 = Math.min(caret.getDot(), caret.getMark());
                int p1 = Math.max(caret.getDot(), caret.getMark());
                if (doc instanceof AbstractDocument) {
                    ((AbstractDocument)doc).replace(p0, p1 - p0, content,null);
                }
                else {
                    if (p0 != p1) {
                        doc.remove(p0, p1 - p0);
                    }
                    if (content != null && content.length() > 0) {
                        doc.insertString(p0, content, null);
                    }
                }
		if (composedTextSaved) {
		    restoreComposedText();
		}
            } catch (BadLocationException e) {
		UIManager.getLookAndFeel().provideErrorFeedback(JTextComponent.this);
            }
        }
    
private voidrestoreComposedText()

	Document doc = getDocument();
	try {
	    doc.insertString(caret.getDot(),
                             composedTextContent, 
		    	     composedTextAttribute);
	    composedTextStart = doc.createPosition(caret.getDot() - 
				composedTextContent.length());
            composedTextEnd = doc.createPosition(caret.getDot());
	} catch (BadLocationException ble) {}
    
private booleansaveComposedText(int pos)

	if (composedTextExists()) {
	    int start = composedTextStart.getOffset();
	    int len = composedTextEnd.getOffset() - 
                composedTextStart.getOffset();
	    if (pos >= start && pos <= start + len) {
		try {	
		    getDocument().remove(start, len);
		    return true;
		} catch (BadLocationException ble) {}
	    }
	}
	return false;
    
public voidselect(int selectionStart, int selectionEnd)
Selects the text between the specified start and end positions.

This method sets the start and end positions of the selected text, enforcing the restriction that the start position must be greater than or equal to zero. The end position must be greater than or equal to the start position, and less than or equal to the length of the text component's text.

If the caller supplies values that are inconsistent or out of bounds, the method enforces these constraints silently, and without failure. Specifically, if the start position or end position is greater than the length of the text, it is reset to equal the text length. If the start position is less than zero, it is reset to zero, and if the end position is less than the start position, it is reset to the start position.

This call is provided for backward compatibility. It is routed to a call to setCaretPosition followed by a call to moveCaretPosition. The preferred way to manage selection is by calling those methods directly.

param
selectionStart the start position of the text
param
selectionEnd the end position of the text
see
#setCaretPosition
see
#moveCaretPosition

	// argument adjustment done by java.awt.TextComponent
        int docLength = getDocument().getLength();
        
	if (selectionStart < 0) {
	    selectionStart = 0;
	}
        if (selectionStart > docLength) {
            selectionStart = docLength;
        }
        if (selectionEnd > docLength) {
            selectionEnd = docLength;
	}
	if (selectionEnd < selectionStart) {
	    selectionEnd = selectionStart;
	}

        setCaretPosition(selectionStart);
        moveCaretPosition(selectionEnd);
    
public voidselectAll()
Selects all the text in the TextComponent. Does nothing on a null or empty document.

        Document doc = getDocument();
        if (doc != null) {
            setCaretPosition(0);
            moveCaretPosition(doc.getLength());
        }
    
public voidsetCaret(javax.swing.text.Caret c)
Sets the caret to be used. By default this will be set by the UI that gets installed. This can be changed to a custom caret if desired. Setting the caret results in a PropertyChange event ("caret") being fired.

param
c the caret
see
#getCaret
beaninfo
description: the caret used to select/navigate bound: true expert: true

        if (caret != null) {
            caret.removeChangeListener(caretEvent);
            caret.deinstall(this);
        }
        Caret old = caret;
        caret = c;
        if (caret != null) {
            caret.install(this);
            caret.addChangeListener(caretEvent);
        }
        firePropertyChange("caret", old, caret);
    
public voidsetCaretColor(java.awt.Color c)
Sets the current color used to render the caret. Setting to null effectively restores the default color. Setting the color results in a PropertyChange event ("caretColor") being fired.

param
c the color
see
#getCaretColor
beaninfo
description: the color used to render the caret bound: true preferred: true

        Color old = caretColor;
        caretColor = c;
        firePropertyChange("caretColor", old, caretColor);
    
public voidsetCaretPosition(int position)
Sets the position of the text insertion caret for the TextComponent. Note that the caret tracks change, so this may move if the underlying text of the component is changed. If the document is null, does nothing. The position must be between 0 and the length of the component's text or else an exception is thrown.

param
position the position
exception
IllegalArgumentException if the value supplied for position is less than zero or greater than the component's text length
beaninfo
description: the caret position

        Document doc = getDocument();
        if (doc != null) {
	    if (position > doc.getLength() || position < 0) {
		throw new IllegalArgumentException("bad position: " + position);
	    }
            caret.setDot(position);
        }
    
public voidsetComponentOrientation(java.awt.ComponentOrientation o)

        // Set the document's run direction property to match the
        // ComponentOrientation property.
        Document doc = getDocument();
        if( doc !=  null ) {
            Boolean runDir = o.isLeftToRight() 
                             ? TextAttribute.RUN_DIRECTION_LTR
                             : TextAttribute.RUN_DIRECTION_RTL;
            doc.putProperty( TextAttribute.RUN_DIRECTION, runDir );
        }
        super.setComponentOrientation( o );
    
public voidsetDisabledTextColor(java.awt.Color c)
Sets the current color used to render the disabled text. Setting the color fires off a PropertyChange event ("disabledTextColor").

param
c the color
see
#getDisabledTextColor
beaninfo
description: color used to render disabled text bound: true preferred: true

        Color old = disabledTextColor;
        disabledTextColor = c;
        firePropertyChange("disabledTextColor", old, disabledTextColor);
    
public voidsetDocument(javax.swing.text.Document doc)
Associates the editor with a text document. The currently registered factory is used to build a view for the document, which gets displayed by the editor after revalidation. A PropertyChange event ("document") is propagated to each listener.

param
doc the document to display/edit
see
#getDocument
beaninfo
description: the text document model bound: true expert: true

        Document old = model;

	/*
	 * aquire a read lock on the old model to prevent notification of
	 * mutations while we disconnecting the old model.
	 */
	try {
	    if (old instanceof AbstractDocument) {
		((AbstractDocument)old).readLock();
	    }
	    if (accessibleContext != null) {
		model.removeDocumentListener(
		    ((AccessibleJTextComponent)accessibleContext));
	    }
	    if (inputMethodRequestsHandler != null) {
		model.removeDocumentListener((DocumentListener)inputMethodRequestsHandler);
	    }
	    model = doc;

            // Set the document's run direction property to match the
            // component's ComponentOrientation property.
            Boolean runDir = getComponentOrientation().isLeftToRight() 
                             ? TextAttribute.RUN_DIRECTION_LTR
                             : TextAttribute.RUN_DIRECTION_RTL;
            doc.putProperty( TextAttribute.RUN_DIRECTION, runDir );

	    firePropertyChange("document", old, doc);
	} finally {
	    if (old instanceof AbstractDocument) {
		((AbstractDocument)old).readUnlock();
	    }
	}

        revalidate();
        repaint();
        if (accessibleContext != null) {
            model.addDocumentListener(
                ((AccessibleJTextComponent)accessibleContext));
        }
	if (inputMethodRequestsHandler != null) {
            model.addDocumentListener((DocumentListener)inputMethodRequestsHandler);
        }
    
public voidsetDragEnabled(boolean b)
Sets the dragEnabled property, which must be true to enable automatic drag handling (the first part of drag and drop) on this component. The transferHandler property needs to be set to a non-null value for the drag to do anything. The default value of the dragEnabled property is false.

When automatic drag handling is enabled, most look and feels begin a drag-and-drop operation whenever the user presses the mouse button over a selection and then moves the mouse a few pixels. Setting this property to true can therefore have a subtle effect on how selections behave.

Some look and feels might not support automatic drag and drop; they will ignore this property. You can work around such look and feels by modifying the component to directly call the exportAsDrag method of a TransferHandler.

param
b the value to set the dragEnabled property to
exception
HeadlessException if b is true and GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless
see
#getDragEnabled
see
#setTransferHandler
see
TransferHandler
since
1.4
beaninfo
description: determines whether automatic drag handling is enabled bound: false

        if (b && GraphicsEnvironment.isHeadless()) {
            throw new HeadlessException();
        }
	dragEnabled = b;
    
public voidsetEditable(boolean b)
Sets the specified boolean to indicate whether or not this TextComponent should be editable. A PropertyChange event ("editable") is fired when the state is changed.

param
b the boolean to be set
see
#isEditable
beaninfo
description: specifies if the text can be edited bound: true

	if (b != editable) {
	    boolean oldVal = editable;
	    editable = b;
	    if (editable) {
		setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
	    } else {
		setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
	    }
	    enableInputMethods(editable);
	    firePropertyChange("editable", Boolean.valueOf(oldVal), Boolean.valueOf(editable));
	    repaint();
	}
    
public voidsetFocusAccelerator(char aKey)
Sets the key accelerator that will cause the receiving text component to get the focus. The accelerator will be the key combination of the alt key and the character given (converted to upper case). By default, there is no focus accelerator key. Any previous key accelerator setting will be superseded. A '\0' key setting will be registered, and has the effect of turning off the focus accelerator. When the new key is set, a PropertyChange event (FOCUS_ACCELERATOR_KEY) will be fired.

param
aKey the key
see
#getFocusAccelerator
beaninfo
description: accelerator character used to grab focus bound: true


                                                                                                                       
        
        aKey = Character.toUpperCase(aKey);
        char old = focusAccelerator;
        focusAccelerator = aKey;
        // Fix for 4341002: value of FOCUS_ACCELERATOR_KEY is wrong.
        // So we fire both FOCUS_ACCELERATOR_KEY, for compatibility,
        // and the correct event here.
        firePropertyChange(FOCUS_ACCELERATOR_KEY, old, focusAccelerator);
        firePropertyChange("focusAccelerator", old, focusAccelerator);
    
public voidsetHighlighter(javax.swing.text.Highlighter h)
Sets the highlighter to be used. By default this will be set by the UI that gets installed. This can be changed to a custom highlighter if desired. The highlighter can be set to null to disable it. A PropertyChange event ("highlighter") is fired when a new highlighter is installed.

param
h the highlighter
see
#getHighlighter
beaninfo
description: object responsible for background highlights bound: true expert: true

        if (highlighter != null) {
            highlighter.deinstall(this);
        }
        Highlighter old = highlighter;
        highlighter = h;
        if (highlighter != null) {
            highlighter.install(this);
        }
        firePropertyChange("highlighter", old, h);
    
private voidsetInputMethodCaretPosition(java.awt.event.InputMethodEvent e)

	int dot;
	
	if (composedTextExists()) {
	    dot = composedTextStart.getOffset();
	    if (!(caret instanceof ComposedTextCaret)) {
		if (composedTextCaret == null) {
		    composedTextCaret = new ComposedTextCaret();
		}
		originalCaret = caret;	
		// Sets composed text caret
	        exchangeCaret(originalCaret, composedTextCaret);
	    }

	    TextHitInfo caretPos = e.getCaret();
	    if (caretPos != null) {
		int index = caretPos.getInsertionIndex();
		dot += index;
		if (index == 0) {
		    // Scroll the component if needed so that the composed text
		    // becomes visible.
		    try {
			Rectangle d = modelToView(dot);
			Rectangle end = modelToView(composedTextEnd.getOffset());
			Rectangle b = getBounds(); 
			d.x += Math.min(end.x - d.x, b.width);
			scrollRectToVisible(d);
		    } catch (BadLocationException ble) {}
		}
	    }
	    caret.setDot(dot);
	} else if (caret instanceof ComposedTextCaret) {
	    dot = caret.getDot();
	    // Restores original caret
	    exchangeCaret(caret, originalCaret);
	    caret.setDot(dot);
	}
    
public voidsetKeymap(javax.swing.text.Keymap map)
Sets the keymap to use for binding events to actions. Setting to null effectively disables keyboard input. A PropertyChange event ("keymap") is fired when a new keymap is installed.

param
map the keymap
see
#getKeymap
beaninfo
description: set of key event to action bindings to use bound: true

        Keymap old = keymap;
        keymap = map;
        firePropertyChange("keymap", old, keymap);
	updateInputMap(old, map);
    
public voidsetMargin(java.awt.Insets m)
Sets margin space between the text component's border and its text. The text component's default Border object will use this value to create the proper margin. However, if a non-default border is set on the text component, it is that Border object's responsibility to create the appropriate margin space (else this property will effectively be ignored). This causes a redraw of the component. A PropertyChange event ("margin") is sent to all listeners.

param
m the space between the border and the text
beaninfo
description: desired space between the border and text area bound: true

        Insets old = margin;
        margin = m;
        firePropertyChange("margin", old, m);
        invalidate();
    
public voidsetNavigationFilter(javax.swing.text.NavigationFilter filter)
Sets the NavigationFilter. NavigationFilter is used by DefaultCaret and the default cursor movement actions as a way to restrict the cursor movement.

since
1.4

        navigationFilter = filter;
    
public voidsetSelectedTextColor(java.awt.Color c)
Sets the current color used to render the selected text. Setting the color to null is the same as Color.black. Setting the color results in a PropertyChange event ("selectedTextColor") being fired.

param
c the color
see
#getSelectedTextColor
beaninfo
description: color used to render selected text bound: true preferred: true

        Color old = selectedTextColor;
        selectedTextColor = c;
        firePropertyChange("selectedTextColor", old, selectedTextColor);
    
public voidsetSelectionColor(java.awt.Color c)
Sets the current color used to render the selection. Setting the color to null is the same as setting Color.white. Setting the color results in a PropertyChange event ("selectionColor").

param
c the color
see
#getSelectionColor
beaninfo
description: color used to render selection background bound: true preferred: true

        Color old = selectionColor;
        selectionColor = c;
        firePropertyChange("selectionColor", old, selectionColor);
    
public voidsetSelectionEnd(int selectionEnd)
Sets the selection end to the specified position. The new end point is constrained to be at or after the current selection start.

This is available for backward compatibility to code that called this method on java.awt.TextComponent. This is implemented to forward to the Caret implementation which is where the actual selection is maintained.

param
selectionEnd the end position of the text >= 0
beaninfo
description: ending location of the selection.

        /* Route through select method to enforce consistent policy
         * between selectionStart and selectionEnd.
         */
        select(getSelectionStart(), selectionEnd);
    
public voidsetSelectionStart(int selectionStart)
Sets the selection start to the specified position. The new starting point is constrained to be before or at the current selection end.

This is available for backward compatibility to code that called this method on java.awt.TextComponent. This is implemented to forward to the Caret implementation which is where the actual selection is maintained.

param
selectionStart the start position of the text >= 0
beaninfo
description: starting location of the selection.

        /* Route through select method to enforce consistent policy
         * between selectionStart and selectionEnd.
         */
        select(selectionStart, getSelectionEnd());
    
public voidsetText(java.lang.String t)
Sets the text of this TextComponent to the specified text. If the text is null or empty, has the effect of simply deleting the old text. When text has been inserted, the resulting caret location is determined by the implementation of the caret class.

This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information. Note that text is not a bound property, so no PropertyChangeEvent is fired when it changes. To listen for changes to the text, use DocumentListener.

param
t the new text to be set
see
#getText
see
DefaultCaret
beaninfo
description: the text of this component

        try {
            Document doc = getDocument();
            if (doc instanceof AbstractDocument) {
                ((AbstractDocument)doc).replace(0, doc.getLength(), t,null);
            }
            else {
                doc.remove(0, doc.getLength());
                doc.insertString(0, t, null);
            }
        } catch (BadLocationException e) {
	    UIManager.getLookAndFeel().provideErrorFeedback(JTextComponent.this);
        }
    
public voidsetUI(javax.swing.plaf.TextUI ui)
Sets the user-interface factory for this text-oriented editor.

param
ui the factory

        super.setUI(ui);
    
private booleanshouldSynthensizeKeyEvents()
Returns true if KeyEvents should be synthesized from an InputEvent.

        if (!checkedInputOverride) {
            checkedInputOverride = true;
            needToSendKeyTypedEvent =
                             !isProcessInputMethodEventOverridden();
        }
        return needToSendKeyTypedEvent;
    
voidupdateInputMap(javax.swing.text.Keymap oldKm, javax.swing.text.Keymap newKm)
Updates the InputMaps in response to a Keymap change.

param
oldKm the old Keymap
param
newKm the new Keymap

	// Locate the current KeymapWrapper.
	InputMap km = getInputMap(JComponent.WHEN_FOCUSED);
	InputMap last = km;
	while (km != null && !(km instanceof KeymapWrapper)) {
	    last = km;
	    km = km.getParent();
	}
	if (km != null) {
	    // Found it, tweak the InputMap that points to it, as well
	    // as anything it points to.
	    if (newKm == null) {
		if (last != km) {
		    last.setParent(km.getParent());
		}
		else {
		    last.setParent(null);
		}
	    }
	    else {
		InputMap newKM = new KeymapWrapper(newKm);
		last.setParent(newKM);
		if (last != km) {
		    newKM.setParent(km.getParent());
		}
	    }
	}
	else if (newKm != null) {
	    km = getInputMap(JComponent.WHEN_FOCUSED);
	    if (km != null) {
		// Couldn't find it.
		// Set the parent of WHEN_FOCUSED InputMap to be the new one.
		InputMap newKM = new KeymapWrapper(newKm);
		newKM.setParent(km.getParent());
		km.setParent(newKM);
	    }
	}

	// Do the same thing with the ActionMap
	ActionMap am = getActionMap();
	ActionMap lastAM = am;
	while (am != null && !(am instanceof KeymapActionMap)) {
	    lastAM = am;
	    am = am.getParent();
	}
	if (am != null) {
	    // Found it, tweak the Actionap that points to it, as well
	    // as anything it points to.
	    if (newKm == null) {
		if (lastAM != am) {
		    lastAM.setParent(am.getParent());
		}
		else {
		    lastAM.setParent(null);
		}
	    }
	    else {
		ActionMap newAM = new KeymapActionMap(newKm);
		lastAM.setParent(newAM);
		if (lastAM != am) {
		    newAM.setParent(am.getParent());
		}
	    }
	}
	else if (newKm != null) {
	    am = getActionMap();
	    if (am != null) {
		// Couldn't find it.
		// Set the parent of ActionMap to be the new one.
		ActionMap newAM = new KeymapActionMap(newKm);
		newAM.setParent(am.getParent());
		am.setParent(newAM);
	    }
	}
    
public voidupdateUI()
Reloads the pluggable UI. The key used to fetch the new interface is getUIClassID(). The type of the UI is TextUI. invalidate is called after setting the UI.

        setUI((TextUI)UIManager.getUI(this));
        invalidate();
    
public intviewToModel(java.awt.Point pt)
Converts the given place in the view coordinate system to the nearest representative location in the model. The component must have a positive size for this translation to be computed (i.e. layout cannot be computed until the component has been sized). The component does not have to be visible or painted.

param
pt the location in the view to translate
return
the offset >= 0 from the start of the document, or -1 if the component does not yet have a positive size.
see
TextUI#viewToModel

        return getUI().viewToModel(this, pt);
    
public voidwrite(java.io.Writer out)
Stores the contents of the model into the given stream. By default this will store the model as plain text.

param
out the output stream
exception
IOException on any I/O error

        Document doc = getDocument();
        try {
            getUI().getEditorKit(this).write(out, doc, 0, doc.getLength());
        } catch (BadLocationException e) {
            throw new IOException(e.getMessage());
        }