FileDocCategorySizeDatePackage
JTextPane.javaAPI DocJava SE 5 API17323Fri Aug 26 14:57:56 BST 2005javax.swing

JTextPane

public class JTextPane extends JEditorPane
A text component that can be marked up with attributes that are represented graphically. You can find how-to information and examples of using text panes in Using Text Components, a section in The Java Tutorial.

This component models paragraphs that are composed of runs of character level attributes. Each paragraph may have a logical style attached to it which contains the default attributes to use if not overridden by attributes set on the paragraph or character run. Components and images may be embedded in the flow of text.

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 true description: A text component that can be marked up with attributes that are graphically represented.
author
Timothy Prinzing
version
1.90 12/19/03
see
javax.swing.text.StyledEditorKit

Fields Summary
private static final String
uiClassID
Constructors Summary
public JTextPane()
Creates a new JTextPane. A new instance of StyledEditorKit is created and set, and the document model set to null.

        super();
        setEditorKit(createDefaultEditorKit());
    
public JTextPane(StyledDocument doc)
Creates a new JTextPane, with a specified document model. A new instance of javax.swing.text.StyledEditorKit is created and set.

param
doc the document model

        this();
        setStyledDocument(doc);
    
Methods Summary
public javax.swing.text.StyleaddStyle(java.lang.String nm, javax.swing.text.Style parent)
Adds a new style into the logical style hierarchy. Style attributes 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 style (must be unique within the collection of named styles). The name may be null if the style is unnamed, but the caller is responsible for managing the reference returned as an unnamed style can't be fetched by name. An unnamed style may be useful for things like character attribute overrides such as found in a style run.
param
parent the parent style. This may be null if unspecified attributes need not be resolved in some other style.
return
the new Style

        StyledDocument doc = getStyledDocument();
        return doc.addStyle(nm, parent);
    
protected javax.swing.text.EditorKitcreateDefaultEditorKit()
Creates the EditorKit to use by default. This is implemented to return javax.swing.text.StyledEditorKit.

return
the editor kit

        return new StyledEditorKit();
    
public javax.swing.text.AttributeSetgetCharacterAttributes()
Fetches the character attributes in effect at the current location of the caret, or null.

return
the attributes, or null

        StyledDocument doc = getStyledDocument();
        Element run = doc.getCharacterElement(getCaretPosition());
        if (run != null) {
            return run.getAttributes();
        }
        return null;
    
public javax.swing.text.MutableAttributeSetgetInputAttributes()
Gets the input attributes for the pane.

return
the attributes

        return getStyledEditorKit().getInputAttributes();
    
public javax.swing.text.StylegetLogicalStyle()
Fetches the logical style assigned to the paragraph represented by the current position of the caret, or null.

return
the Style

        StyledDocument doc = getStyledDocument();
        return doc.getLogicalStyle(getCaretPosition());
    
public javax.swing.text.AttributeSetgetParagraphAttributes()
Fetches the current paragraph attributes in effect at the location of the caret, or null if none.

return
the attributes

        StyledDocument doc = getStyledDocument();
        Element paragraph = doc.getParagraphElement(getCaretPosition());
        if (paragraph != null) {
            return paragraph.getAttributes();
        }
        return null;
    
public javax.swing.text.StylegetStyle(java.lang.String nm)
Fetches a named non-null style previously added.

param
nm the name of the style
return
the Style

        StyledDocument doc = getStyledDocument();
        return doc.getStyle(nm);
    
public javax.swing.text.StyledDocumentgetStyledDocument()
Fetches the model associated with the editor.

return
the model

        return (StyledDocument) getDocument();
    
protected final javax.swing.text.StyledEditorKitgetStyledEditorKit()
Gets the editor kit.

return
the editor kit

        return (StyledEditorKit) getEditorKit();
    
public java.lang.StringgetUIClassID()
Returns the class ID for the UI.

return
the string "TextPaneUI"
see
JComponent#getUIClassID
see
UIDefaults#getUI

        return uiClassID;
    
public voidinsertComponent(java.awt.Component c)
Inserts a component into the document as a replacement for the currently selected content. If there is no selection the component is effectively inserted at the current position of the caret. This is represented in the associated document as an attribute of one character of content.

The component given is the actual component used by the JTextPane. Since components cannot be a child of more than one container, this method should not be used in situations where the model is shared by text components.

The component is placed relative to the text baseline according to the value returned by Component.getAlignmentY. For Swing components this value can be conveniently set using the method JComponent.setAlignmentY. For example, setting a value of 0.75 will cause 75 percent of the component to be above the baseline, and 25 percent of the component to be below the baseline.

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

param
c the component to insert

        MutableAttributeSet inputAttributes = getInputAttributes();
        inputAttributes.removeAttributes(inputAttributes);
        StyleConstants.setComponent(inputAttributes, c);
        replaceSelection(" ", false);
        inputAttributes.removeAttributes(inputAttributes);
    
public voidinsertIcon(javax.swing.Icon g)
Inserts an icon into the document as a replacement for the currently selected content. If there is no selection the icon is effectively inserted at the current position of the caret. This is represented in the associated document as an attribute of one character of content.

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

param
g the icon to insert
see
Icon

        MutableAttributeSet inputAttributes = getInputAttributes();
        inputAttributes.removeAttributes(inputAttributes);
        StyleConstants.setIcon(inputAttributes, g);
        replaceSelection(" ", false);
        inputAttributes.removeAttributes(inputAttributes);
    
protected java.lang.StringparamString()
Returns a string representation of this JTextPane. 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.

return
a string representation of this JTextPane

        return super.paramString();
    
public voidremoveStyle(java.lang.String nm)
Removes a named non-null style previously added to the document.

param
nm the name of the style to remove

        StyledDocument doc = getStyledDocument();
        doc.removeStyle(nm);
    
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. The replacement text will have the attributes currently defined for input at the point of insertion. If the document is not editable, beep and return.

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

        replaceSelection(content, true);
    
private voidreplaceSelection(java.lang.String content, boolean checkEditable)

        if (checkEditable && !isEditable()) {
	    UIManager.getLookAndFeel().provideErrorFeedback(JTextPane.this);
            return;
        }
        Document doc = getStyledDocument();
        if (doc != null) {
            try {
                Caret caret = getCaret();
                int p0 = Math.min(caret.getDot(), caret.getMark());
                int p1 = Math.max(caret.getDot(), caret.getMark());
		AttributeSet attr = getInputAttributes().copyAttributes();
                if (doc instanceof AbstractDocument) {
                    ((AbstractDocument)doc).replace(p0, p1 - p0, content,attr);
                }
                else {
                    if (p0 != p1) {
                        doc.remove(p0, p1 - p0);
                    }
                    if (content != null && content.length() > 0) {
                        doc.insertString(p0, content, attr);
                    }
                }
            } catch (BadLocationException e) {
	        UIManager.getLookAndFeel().provideErrorFeedback(JTextPane.this);
            }
        }
    
public voidsetCharacterAttributes(javax.swing.text.AttributeSet attr, boolean replace)
Applies the given attributes to character content. If there is a selection, the attributes are applied to the selection range. If there is no selection, the attributes are applied to the input attribute set which defines the attributes for any new text that gets inserted.

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

param
attr the attributes
param
replace if true, then replace the existing attributes first

        int p0 = getSelectionStart();
        int p1 = getSelectionEnd();
        if (p0 != p1) {
            StyledDocument doc = getStyledDocument();
            doc.setCharacterAttributes(p0, p1 - p0, attr, replace);
        } else {
            MutableAttributeSet inputAttributes = getInputAttributes();
            if (replace) {
                inputAttributes.removeAttributes(inputAttributes);
            }
            inputAttributes.addAttributes(attr);
        }
    
public voidsetDocument(javax.swing.text.Document doc)
Associates the editor with a text document. This must be a StyledDocument.

param
doc the document to display/edit
exception
IllegalArgumentException if doc can't be narrowed to a StyledDocument which is the required type of model for this text component

        if (doc instanceof StyledDocument) {
            super.setDocument(doc);
        } else {
            throw new IllegalArgumentException("Model must be StyledDocument");
        }
    
public final voidsetEditorKit(javax.swing.text.EditorKit kit)
Sets the currently installed kit for handling content. This is the bound property that establishes the content type of the editor.

param
kit the desired editor behavior
exception
IllegalArgumentException if kit is not a StyledEditorKit

        if (kit instanceof StyledEditorKit) {
            super.setEditorKit(kit);
        } else {
            throw new IllegalArgumentException("Must be StyledEditorKit");
        }
    
public voidsetLogicalStyle(javax.swing.text.Style s)
Sets the logical style to use for the paragraph at the current caret position. If attributes aren't explicitly set for character and paragraph attributes they will resolve through the logical style assigned to the paragraph, which in term may resolve through some hierarchy completely independent of the element hierarchy in the document.

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

param
s the logical style to assign to the paragraph, or null for no style

        StyledDocument doc = getStyledDocument();
        doc.setLogicalStyle(getCaretPosition(), s);
    
public voidsetParagraphAttributes(javax.swing.text.AttributeSet attr, boolean replace)
Applies the given attributes to paragraphs. If there is a selection, the attributes are applied to the paragraphs that intersect the selection. If there is no selection, the attributes are applied to the paragraph at the current caret position.

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

param
attr the non-null attributes
param
replace if true, replace the existing attributes first

        int p0 = getSelectionStart();
        int p1 = getSelectionEnd();
        StyledDocument doc = getStyledDocument();
        doc.setParagraphAttributes(p0, p1 - p0, attr, replace);
    
public voidsetStyledDocument(javax.swing.text.StyledDocument 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.

param
doc the document to display/edit

        super.setDocument(doc);
    
private voidwriteObject(java.io.ObjectOutputStream s)
See readObject and writeObject in JComponent for more information about serialization in Swing.

param
s the output stream



                             
          
        s.defaultWriteObject();
        if (getUIClassID().equals(uiClassID)) {
            byte count = JComponent.getWriteObjCounter(this);
            JComponent.setWriteObjCounter(this, --count);
            if (count == 0 && ui != null) {
                ui.installUI(this);
            }
        }