|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent | +--javax.swing.text.JTextComponent | +--javax.swing.JEditorPane
Safe: A text component to edit various kinds of content. You can find how-to information and examples of using editor panes in Using Text Components, a section in The Java Tutorial.
This component uses implementations of the
EditorKit
to accomplish its behavior. It effectively
morphs into the proper kind of text editor for the kind
of content it is given. The content type that editor is bound
to at any given time is determined by the EditorKit
currently
installed. If the content is set to a new URL, its type is used
to determine the EditorKit
that should be used to
load the content.
By default, the following types of content are known:
DefaultEditorKit
that produces a wrapped plain text view.
javax.swing.text.html.HTMLEditorKit
which provides HTML 3.2 support.
javax.swing.text.rtf.RTFEditorKit
which provides a limited support of the Rich Text Format.
There are several ways to load content into this component.
EditorKit
will be used, and the content type will be
expected to be of this type.
Reader
. Note that if the content type is HTML,
relative references (e.g. for things like images) can't be resolved
unless the <base> tag is used or the Base property
on HTMLDocument
is set.
In this case the current EditorKit
will be used,
and the content type will be expected to be of this type.
EditorKit
for that content type will be set.
For the keyboard keys used by this component in the standard Look and
Feel (L&F) renditions, see the
JEditorPane
key assignments.
Some kinds of content may provide hyperlink support by generating
hyperlink events. The HTML EditorKit
will generate
hyperlink events if the JEditorPane
is not editable
(JEditorPane.setEditable(false);
has been called).
If HTML frames are embedded in the document, the typical response would be
to change a portion of the current document. The following code
fragment is a possible hyperlink listener implementation, that treats
HTML frame events specially, and simply displays any other activated
hyperlinks.
class Hyperactive implements HyperlinkListener {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane pane = (JEditorPane) e.getSource();
if (e instanceof HTMLFrameHyperlinkEvent) {
HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e;
HTMLDocument doc = (HTMLDocument)pane.getDocument();
doc.processHTMLFrameHyperlinkEvent(evt);
} else {
try {
pane.setPage(e.getURL());
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
}
Culturally dependent information in some documents is handled through
a mechanism called character encoding. Character encoding is an
unambiguous mapping of the members of a character set (letters, ideographs,
digits, symbols, or control functions) to specific numeric code values. It
represents the way the file is stored. Example character encodings are
ISO-8859-1, ISO-8859-5, Shift-jis, Euc-jp, and UTF-8. When the file is
passed to an user agent (JEditorPane
) it is converted to
the document character set (ISO-10646 aka Unicode).
There are multiple ways to get a character set mapping to happen
with JEditorPane
.
EditorKit
.read operation throw a
ChangedCharSetException
which will
be caught. The read is then restarted with a new Reader that uses
the character set specified in the ChangedCharSetException
(which is an IOException
).
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 java.beans.XMLEncoder
.
Field Summary | |
private EditorKit |
kit
Current content binding of the editor. |
private static Object |
kitLoaderRegistryKey
|
private static Object |
kitRegistryKey
|
private static Object |
kitTypeRegistryKey
|
(package private) javax.swing.JEditorPane.PageStream |
loading
Stream currently loading asynchronously (potentially cancelable). |
private Hashtable |
pageProperties
|
private Hashtable |
typeHandlers
Table of registered type handlers for this editor. |
private static String |
uiClassID
|
Fields inherited from class javax.swing.text.JTextComponent |
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY |
Fields inherited from class javax.swing.JComponent |
_bounds, accessibleContext, listenerList, paintingChild, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
Fields inherited from class java.awt.Container |
|
Fields inherited from class java.awt.Component |
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
Constructor Summary | |
JEditorPane()
Enabled: Creates a new JEditorPane . |
|
JEditorPane(String url)
Suppressed: Creates a JEditorPane based on a string containing
a URL specification. |
|
JEditorPane(String type,
String text)
Suppressed: Creates a JEditorPane that has been initialized
to the given text. |
|
JEditorPane(URL initialPage)
Enabled: Creates a JEditorPane based on a specified URL for input. |
Method Summary | |
void |
addHyperlinkListener(HyperlinkListener listener)
Enabled: Adds a hyperlink listener for notification of any changes, for example when a link is selected and entered. |
protected EditorKit |
createDefaultEditorKit()
Creates the default editor kit ( PlainEditorKit ) for when
the component is first created. |
static EditorKit |
createEditorKitForContentType(String type)
Suppressed: Creates a handler for the given type from the default registry of editor kits. |
void |
fireHyperlinkUpdate(HyperlinkEvent e)
Suppressed: Notifies all listeners that have registered interest for notification on this event type. |
AccessibleContext |
getAccessibleContext()
Suppressed: Gets the AccessibleContext associated with this JEditorPane. |
String |
getContentType()
Enabled: Gets the type of content that this editor is currently set to deal with. |
EditorKit |
getEditorKit()
Suppressed: Fetches the currently installed kit for handling content. |
static String |
getEditorKitClassNameForContentType(String type)
Suppressed: Returns the currently registered EditorKit
class name for the type type . |
EditorKit |
getEditorKitForContentType(String type)
Suppressed: Fetches the editor kit to use for the given type of content. |
HyperlinkListener[] |
getHyperlinkListeners()
Suppressed: Returns an array of all the HyperLinkListener s added
to this JEditorPane with addHyperlinkListener(). |
private static Hashtable |
getKitLoaderRegistry()
|
private static Hashtable |
getKitRegisty()
|
private static Hashtable |
getKitTypeRegistry()
|
URL |
getPage()
Enabled: Gets the current URL being displayed. |
Dimension |
getPreferredSize()
Enabled: Returns the preferred size for the JEditorPane . |
boolean |
getScrollableTracksViewportHeight()
Enabled: Returns true if a viewport should always force the height of this Scrollable to match the height of the viewport. |
boolean |
getScrollableTracksViewportWidth()
Enabled: Returns true if a viewport should always force the width of this Scrollable to match the width of the viewport. |
protected InputStream |
getStream(URL page)
Fetches a stream for the given URL, which is about to be loaded by the setPage method. |
String |
getText()
Enabled: Returns the text contained in this TextComponent
in terms of the
content type of this editor. |
String |
getUIClassID()
Suppressed: Gets the class ID for the UI. |
private static void |
loadDefaultKitsIfNecessary()
This is invoked every time the registries are accessed. |
protected String |
paramString()
Returns a string representation of this JEditorPane . |
(package private) void |
read(InputStream in,
Document doc)
This method invokes the EditorKit to initiate a
read. |
void |
read(InputStream in,
Object desc)
Suppressed: This method initializes from a stream. |
static void |
registerEditorKitForContentType(String type,
String classname)
Suppressed: Establishes the default bindings of type to
classname . |
static void |
registerEditorKitForContentType(String type,
String classname,
ClassLoader loader)
Suppressed: Establishes the default bindings of type to
classname . |
void |
removeHyperlinkListener(HyperlinkListener listener)
Enabled: Removes a hyperlink listener. |
void |
replaceSelection(String content)
Suppressed: Replaces the currently selected content with new content represented by the given string. |
void |
scrollToReference(String reference)
Enabled: Scrolls the view to the given reference location (that is, the value returned by the UL.getRef
method for the URL being displayed). |
private void |
setCharsetFromContentTypeParameters(String paramlist)
This method gets the charset information specified as part of the content type in the http header information. |
void |
setContentType(String type)
Enabled: Sets the type of content that this editor handles. |
void |
setEditorKit(EditorKit kit)
Suppressed: Sets the currently installed kit for handling content. |
void |
setEditorKitForContentType(String type,
EditorKit k)
Suppressed: Directly sets the editor kit to use for the given type. |
void |
setPage(String url)
Suppressed: Sets the current URL being displayed. |
void |
setPage(URL page)
Enabled: Sets the current URL being displayed. |
void |
setText(String t)
Enabled: Sets the text of this TextComponent to the specified
content,
which is expected to be in the format of the content type of
this editor. |
void |
setText(String t)
Added: This has been overridden to accept only safe html, ie, no tags that imply following a URL. |
private void |
writeObject(ObjectOutputStream s)
See readObject and writeObject in
JComponent for more
information about serialization in Swing. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
javax.swing.JEditorPane.PageStream loading
private EditorKit kit
private Hashtable pageProperties
private Hashtable typeHandlers
private static final Object kitRegistryKey
private static final Object kitTypeRegistryKey
private static final Object kitLoaderRegistryKey
private static final String uiClassID
getUIClassID()
,
JTextComponent.readObject(java.io.ObjectInputStream)
Constructor Detail |
public JEditorPane()
JEditorPane
.
The document model is set to null
.
public JEditorPane(URL initialPage) throws IOException
JEditorPane
based on a specified URL for input.
initialPage
- the URLpublic JEditorPane(String url) throws IOException
JEditorPane
based on a string containing
a URL specification.
url
- the URLpublic JEditorPane(String type, String text)
JEditorPane
that has been initialized
to the given text. This is a convenience constructor that calls the
setContentType
and setText
methods.
type
- mime type of the given texttext
- the text to initialize withMethod Detail |
public void addHyperlinkListener(HyperlinkListener listener)
listener
- the listenerpublic void removeHyperlinkListener(HyperlinkListener listener)
listener
- the listenerpublic HyperlinkListener[] getHyperlinkListeners()
HyperLinkListener
s added
to this JEditorPane with addHyperlinkListener().
HyperLinkListener
s added or an empty
array if no listeners have been addedpublic void fireHyperlinkUpdate(HyperlinkEvent e)
EditorKit
if a content type
that supports hyperlinks is currently active and there
was activity with a link. The listener list is processed
last to first.
e
- the eventEventListenerList
public void setPage(URL page) throws IOException
null
, then
a new default document is created and the URL is read into it.
If the URL contains and reference location, the location will
be scrolled to by calling the scrollToReference
method. If the desired URL is not the one currently being
displayed, the getStream
method is called to
give subclasses control over the stream provided.
This may load either synchronously or asynchronously
depending upon the document returned by the EditorKit
.
If the Document
is of type
AbstractDocument
and has a value returned by
AbstractDocument.getAsynchronousLoadPriority
that is greater than or equal to zero, the page will be
loaded on a separate thread using that priority.
If the document is loaded synchronously, it will be
filled in with the stream prior to being installed into
the editor with a call to setDocument
, which
is bound and will fire a property change event. If an
IOException
is thrown the partially loaded
document will
be discarded and neither the document or page property
change events will be fired. If the document is
successfully loaded and installed, a view will be
built for it by the UI which will then be scrolled if
necessary, and then the page property change event
will be fired.
If the document is loaded asynchronously, the document
will be installed into the editor immediately using a
call to setDocument
which will fire a
document property change event, then a thread will be
created which will begin doing the actual loading.
In this case, the page property change event will not be
fired by the call to this method directly, but rather will be
fired when the thread doing the loading has finished.
It will also be fired on the event-dispatch thread.
Since the calling thread can not throw an IOException
in the event of failure on the other thread, the page
property change event will be fired when the other
thread is done whether the load was successful or not.
page
- the URL of the page
IOException
getPage()
public void read(InputStream in, Object desc) throws IOException
HTMLEditorKit
, and the
desc
parameter is an HTMLDocument
,
then it invokes the HTMLEditorKit
to initiate
the read. Otherwise it calls the superclass
method which loads the model as plain text.
in
- the stream from which to readdesc
- an object describing the stream
IOException
JTextComponent.read(java.io.Reader, java.lang.Object)
,
JTextComponent.setDocument(javax.swing.text.Document)
void read(InputStream in, Document doc) throws IOException
EditorKit
to initiate a
read. In the case where a ChangedCharSetException
is thrown this exception will contain the new CharSet.
Therefore the read
operation
is then restarted after building a new Reader with the new charset.
in
- the inputstream to usedoc
- the document to load
IOException
protected InputStream getStream(URL page) throws IOException
setPage
method. By
default, this simply opens the URL and returns the
stream. This can be reimplemented to do useful things
like fetch the stream from a cache, monitor the progress
of the stream, etc.
This method is expected to have the the side effect of
establishing the content type, and therefore setting the
appropriate EditorKit
to use for loading the stream.
If this the stream was an http connection, redirects
will be followed and the resulting URL will be set as
the Document.StreamDescriptionProperty
so that relative
URL's can be properly resolved.
page
- the URL of the page
IOException
public void scrollToReference(String reference)
UL.getRef
method for the URL being displayed). By default, this
method only knows how to locate a reference in an
HTMLDocument. The implementation calls the
scrollRectToVisible
method to
accomplish the actual scrolling. If scrolling to a
reference location is needed for document types other
than HTML, this method should be reimplemented.
This method will have no effect if the component
is not visible.
reference
- the named location to scroll topublic URL getPage()
null
, and relative URL's will not be
resolved.
null
if nonepublic void setPage(String url) throws IOException
url
- the URL for display
IOException
public String getUIClassID()
getUIClassID
in class JComponent
JComponent.getUIClassID()
,
UIDefaults.getUI(javax.swing.JComponent)
protected EditorKit createDefaultEditorKit()
PlainEditorKit
) for when
the component is first created.
public EditorKit getEditorKit()
createDefaultEditorKit
is called to set up a default
if necessary.
public final String getContentType()
EditorKit
.
null
if no editor kit setpublic final void setContentType(String type)
getEditorKitForContentType
,
and then setEditorKit
if an editor kit can
be successfully located. This is mostly convenience method
that can be used as an alternative to calling
setEditorKit
directly.
If there is a charset definition specified as a parameter
of the content type specification, it will be used when
loading input streams using the associated EditorKit
.
For example if the type is specified as
text/html; charset=EUC-JP
the content
will be loaded using the EditorKit
registered for
text/html
and the Reader provided to
the EditorKit
to load unicode into the document will
use the EUC-JP
charset for translating
to unicode. If the type is not recognized, the content
will be loaded using the EditorKit
registered
for plain text, text/plain
.
type
- the non-null
mime type for the content editing
supportgetContentType()
private void setCharsetFromContentTypeParameters(String paramlist)
public void setEditorKit(EditorKit kit)
null
,
the new kit is installed, and a default document created for it.
A PropertyChange
event ("editorKit") is always fired when
setEditorKit
is called.
NOTE: This has the side effect of changing the model,
because the EditorKit
is the source of how a
particular type
of content is modeled. This method will cause setDocument
to be called on behalf of the caller to ensure integrity
of the internal state.
kit
- the desired editor behaviorgetEditorKit()
public EditorKit getEditorKitForContentType(String type)
EditorKit
registered
for the given type, it will try to create an
EditorKit
from the default EditorKit
registry.
If that fails, a PlainEditorKit
is used on the
assumption that all text documents can be represented
as plain text.
This method can be reimplemented to use some other kind of type registry. This can be reimplemented to use the Java Activation Framework, for example.
type
- the non-null content type
public void setEditorKitForContentType(String type, EditorKit k)
createEditorKitForContentType
to install handlers for
content types with a look-and-feel bias.
type
- the non-null
content typek
- the editor kit to be setpublic void replaceSelection(String content)
null
) this amounts to a removal of the
current selection. The replacement text will have the
attributes currently defined for input. If the component 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.
replaceSelection
in class JTextComponent
content
- the content to replace the selection with. This
value can be null
public static EditorKit createEditorKitForContentType(String type)
ClassLoader
,
that ClassLoader
will be used to load the prototype.
If there was no registered ClassLoader
,
Class.forName
will be used to load the prototype.
Once a prototype EditorKit
instance is successfully
located, it is cloned and the clone is returned.
type
- the content type
null
if there is nothing
registered for the given typepublic static void registerEditorKitForContentType(String type, String classname)
type
to
classname
.
The class will be dynamically loaded later when actually
needed, and can be safely changed before attempted uses
to avoid loading unwanted classes. The prototype
EditorKit
will be loaded with Class.forName
when registered with this method.
type
- the non-null
content typeclassname
- the class to load laterpublic static void registerEditorKitForContentType(String type, String classname, ClassLoader loader)
type
to
classname
.
The class will be dynamically loaded later when actually
needed using the given ClassLoader
,
and can be safely changed
before attempted uses to avoid loading unwanted classes.
type
- the non-null content typeclassname
- the class to load laterloader
- the ClassLoader
to use to load the namepublic static String getEditorKitClassNameForContentType(String type)
EditorKit
class name for the type type
.
type
- the non-null
content typeprivate static Hashtable getKitTypeRegistry()
private static Hashtable getKitLoaderRegistry()
private static Hashtable getKitRegisty()
private static void loadDefaultKitsIfNecessary()
public Dimension getPreferredSize()
JEditorPane
.
The preferred size for JEditorPane
is slightly altered
from the preferred size of the superclass. If the size
of the viewport has become smaller than the minimum size
of the component, the scrollable definition for tracking
width or height will turn to false. The default viewport
layout will give the preferred size, and that is not desired
in the case where the scrollable is tracking. In that case
the normal preferred size is adjusted to the
minimum size. This allows things like HTML tables to
shrink down to their minimum size and then be laid out at
their minimum size, refusing to shrink any further.
getPreferredSize
in class JComponent
Dimension
containing the preferred sizeJComponent.setPreferredSize(java.awt.Dimension)
,
ComponentUI
public void setText(String t)
TextComponent
to the specified
content,
which is expected to be in the format of the content type of
this editor. For example, if the type is set to text/html
the string should be specified in terms of HTML.
This is implemented to remove the contents of the current document,
and replace them by parsing the given string using the current
EditorKit
. This gives the semantics of the
superclass by not changing
out the model, while supporting the content type currently set on
this component. The assumption is that the previous content is
relatively
small, and that the previous content doesn't have side effects.
Both of those assumptions can be violated and cause undesirable results.
To avoid this, create a new document,
getEditorKit().createDefaultDocument()
, and replace the
existing Document
with the new one. You are then assured the
previous Document
won't have any lingering state.
An alternative way to load this component with a string would be to create a StringReader and call the read method. In this case the model would be replaced after it was initialized with the contents of the string.
This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information.
setText
in class JTextComponent
t
- the new text to be setgetText()
public String getText()
TextComponent
in terms of the
content type of this editor. If an exception is thrown while
attempting to retrieve the text, null
will be returned.
This is implemented to call JTextComponent.write
with
a StringWriter
.
getText
in class JTextComponent
setText(java.lang.String)
public boolean getScrollableTracksViewportWidth()
Scrollable
to match the width of the viewport.
getScrollableTracksViewportWidth
in interface Scrollable
getScrollableTracksViewportWidth
in class JTextComponent
public boolean getScrollableTracksViewportHeight()
Scrollable
to match the height of the viewport.
getScrollableTracksViewportHeight
in interface Scrollable
getScrollableTracksViewportHeight
in class JTextComponent
Scrollable
's height to match its own,
false otherwiseprivate void writeObject(ObjectOutputStream s) throws IOException
readObject
and writeObject
in
JComponent
for more
information about serialization in Swing.
s
- the ObjectOutputStream
in which to write
IOException
protected String paramString()
JEditorPane
.
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
.
paramString
in class JTextComponent
JEditorPane
public AccessibleContext getAccessibleContext()
getAccessibleContext
in interface Accessible
getAccessibleContext
in class JTextComponent
public void setText(String t)
JEditorPane is declared 'safe', so it must not provide any implicit authority. The underlying html renderer will follow link and image URLs in the set text. Therefore, from E, we prevent the setting of text that would cause the renderer to employ these authorities which have never been granted to it.
t
- the new text to be setSafeHTMLParser
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |