public class SHTMLEditorPane
extends javax.swing.JEditorPane
implements java.awt.dnd.DropTargetListener, java.awt.dnd.DragSourceListener, java.awt.dnd.DragGestureListener
This is extending JEditorPane
by cut and paste
and drag and drop for HTML text.
JEditorPane
inherits cut and paste from
JTextComponent
where handling for plain text is implemented only.
JEditorPane
has no additional functionality to add cut
and paste for the various content types it supports
(such as 'text/html').
In stage 4 support for caret movement inside tables and table manipulation methods are added.
In stage 6 support for list manipulation was added.
HTMLText
,
HTMLTextSelection
,
Serialized FormModifier and Type | Class and Description |
---|---|
static class |
SHTMLEditorPane.PasteMode |
javax.swing.JEditorPane.AccessibleJEditorPane, javax.swing.JEditorPane.AccessibleJEditorPaneHTML, javax.swing.JEditorPane.JEditorPaneAccessibleHypertextSupport
javax.swing.text.JTextComponent.AccessibleJTextComponent, javax.swing.text.JTextComponent.DropLocation, javax.swing.text.JTextComponent.KeyBinding
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
static int |
ALL_CELLS
range indicator for applying attributes to all cells
|
static java.lang.String |
DEFAULT_TABLE_WIDTH
default table width
|
static java.lang.String |
DEFAULT_VERTICAL_ALIGN
default vertical alignment
|
static java.lang.String |
deleteNextCharAction |
static java.lang.String |
deletePrevCharAction |
static java.lang.String |
endAction |
static java.lang.String |
homeAction |
static java.lang.String |
insertLineBreakAction |
static java.lang.String |
moveDownAction |
static java.lang.String |
moveUpAction |
static java.lang.String |
newListItemAction |
static java.lang.String |
shiftEndAction |
static java.lang.String |
shiftHomeAction |
static int |
THIS_CELL
range indicator for applying attributes to the current cell only
|
static int |
THIS_COLUMN
range indicator for applying attributes to cells of the current column only
|
static int |
THIS_ROW
range indicator for applying attributes to cells of the current row only
|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Constructor and Description |
---|
SHTMLEditorPane()
construct a new
SHTMLEditorPane |
Modifier and Type | Method and Description |
---|---|
void |
appendTableColumn()
append a table column after the last column
(if any)
|
void |
appendTableRow()
Appends a row to a table if the caret is inside a table.
|
void |
applyAttributes(javax.swing.text.AttributeSet attributeSet,
boolean applyToCompleteParagraph) |
void |
applyAttributes(javax.swing.text.AttributeSet attributeSet,
boolean applyToCompleteParagraph,
boolean replace)
Sets the attributes for a given part of this editor.
|
void |
applyCellAttributes(javax.swing.text.AttributeSet a,
int range)
apply a set of attributes to a given range of cells
of the table the caret is currently in (if any)
|
void |
applyCharacterTag(java.lang.String tag)
(Unfinished.)
|
void |
applyListAttributes(javax.swing.text.AttributeSet a)
apply a set of attributes to the list the caret is
currently in (if any)
|
void |
applyParagraphTag(java.lang.String tag,
java.util.Vector overwritableTags)
Switches the elements in the current selection to the given tag.
|
void |
applyTableAttributes(javax.swing.text.AttributeSet a)
apply a set of attributes to the table the caret is
currently in (if any)
|
void |
deleteTableCol()
delete the column of the table the caret is currently in (if any)
|
void |
deleteTableRow()
delete the row of the table the caret is currently in (if any)
|
void |
dragDropEnd(java.awt.dnd.DragSourceDropEvent event)
this message goes to DragSourceListener, informing it that the dragging
has ended
|
void |
dragEnter(java.awt.dnd.DragSourceDragEvent event)
this message goes to DragSourceListener, informing it that the dragging
has entered the DropSite
|
void |
dragEnter(java.awt.dnd.DropTargetDragEvent event)
is invoked when you are dragging over the DropSite
|
void |
dragExit(java.awt.dnd.DragSourceEvent event)
this message goes to DragSourceListener, informing it that the dragging
has exited the DropSite
|
void |
dragExit(java.awt.dnd.DropTargetEvent event)
is invoked when you are exit the DropSite without dropping
|
void |
dragGestureRecognized(java.awt.dnd.DragGestureEvent event)
a drag gesture has been initiated
|
void |
dragOver(java.awt.dnd.DragSourceDragEvent event)
this message goes to DragSourceListener, informing it that
the dragging is currently ocurring over the DropSite
|
void |
dragOver(java.awt.dnd.DropTargetDragEvent event)
is invoked when a drag operation is going on
|
void |
drop(java.awt.dnd.DropTargetDropEvent event)
a drop has occurred.
|
void |
dropActionChanged(java.awt.dnd.DragSourceDragEvent event)
is invoked when the user changes the dropAction
|
void |
dropActionChanged(java.awt.dnd.DropTargetDragEvent event)
is invoked if the user modifies the current drop gesture
|
java.lang.String |
elementToHTML(javax.swing.text.Element element)
Returns the string HTML representation of the element.
|
javax.swing.text.Element |
getCurrentLinkElement() |
javax.swing.text.Element |
getCurrentParagraphElement()
Gets the paragraph element in which the caret is located.
|
javax.swing.text.Element |
getCurrentTableCell()
Gets the table cell at the current caret position.
|
SHTMLEditorPane.PasteMode |
getPasteMode() |
javax.swing.JPopupMenu |
getPopup() |
SHTMLDocument |
getSHTMLDocument() |
javax.swing.text.Element |
getTableCell(int position)
Gets the table cell element at the given position, or null if none.
|
javax.swing.TransferHandler |
getTransferHandler() |
void |
goNextCell(javax.swing.text.Element cell) |
void |
goPrevCell(javax.swing.text.Element cell) |
void |
initDnd()
Initialize the drag and drop implementation for this component.
|
void |
insertAnchor(java.lang.String anchorName)
apply a new anchor to the currently selected text
|
void |
insertBreak()
insert a line break (i.e.
|
void |
insertNewTable(int colCount)
Insert a new table.
|
void |
insertTableColumn()
insert a table column before the current column
(if any)
|
void |
insertTableRow(java.lang.String forcedCellName)
Inserts a row to a table, assuming the caret is currently
inside a table.
|
protected boolean |
processKeyBinding(javax.swing.KeyStroke ks,
java.awt.event.KeyEvent e,
int condition,
boolean pressed) |
void |
removeAnchor(java.lang.String anchorName)
remove an anchor with a given name
|
void |
removeCharacterAttributes() |
void |
removeParagraphAttributes() |
void |
replaceSelection(com.lightdev.app.shtm.HTMLText replacementHTMLText)
Replaces the currently selected content with new content
represented by the given
HTMLText . |
void |
replaceSelection(java.lang.String content) |
void |
setLink(java.lang.String linkText,
java.lang.String href,
java.lang.String className)
set a text link at the current selection replacing the selection
with a given text.
|
void |
setLink(java.lang.String linkText,
java.lang.String href,
java.lang.String className,
java.lang.String linkImage,
java.awt.Dimension size)
Sets a hyperlink at the current selection, replacing the selection
with the given text or image.
|
void |
setPasteMode(SHTMLEditorPane.PasteMode pasteMode) |
void |
setPasteModeFromPrefs() |
void |
setPopup(javax.swing.JPopupMenu popup) |
void |
setText(java.lang.String sText)
Convenience method for setting the document text
contains hack around JDK bug 4799813
see http://developer.java.sun.com/developer/bugParade/bugs/4799813.html
regression in 1.4.x, to be fixed in 1.5
When setting the text to be "& footext", it becomes "&footext" (space disappears)
same ocurrs for "</a> &", it becomes "</a>&" (space disappears)
with the hack it now does not occur anymore.
|
void |
toggleList(java.lang.String listTag,
javax.swing.text.AttributeSet attributeSet,
boolean forceOff)
toggle list formatting on or off for the currently
selected text portion.
|
void |
toggleTableHeaderCell()
For each cell within the selection, turns a table data cell into a table header cell or vice
versa.
|
boolean |
tryDefaultKeyStrokeActionWithinCell(int keyCode,
int modifiers,
java.awt.event.ActionEvent event)
Performs the default key stroke action, assuming that the caret is within
a table cell and that the action is a cursor move; if the cursor leaves
the current table cell, undoes the action.
|
addHyperlinkListener, createDefaultEditorKit, createEditorKitForContentType, fireHyperlinkUpdate, getAccessibleContext, getContentType, getEditorKit, getEditorKitClassNameForContentType, getEditorKitForContentType, getHyperlinkListeners, getPage, getPreferredSize, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getStream, getText, getUIClassID, paramString, read, registerEditorKitForContentType, registerEditorKitForContentType, removeHyperlinkListener, scrollToReference, setContentType, setEditorKit, setEditorKitForContentType, setPage, setPage
addCaretListener, addInputMethodListener, addKeymap, copy, cut, fireCaretUpdate, getActions, getCaret, getCaretColor, getCaretListeners, getCaretPosition, getDisabledTextColor, getDocument, getDragEnabled, getDropLocation, getDropMode, getFocusAccelerator, getHighlighter, getInputMethodRequests, getKeymap, getKeymap, getMargin, getNavigationFilter, getPreferredScrollableViewportSize, getPrintable, getScrollableBlockIncrement, getScrollableUnitIncrement, getSelectedText, getSelectedTextColor, getSelectionColor, getSelectionEnd, getSelectionStart, getText, getToolTipText, getUI, isEditable, loadKeymap, modelToView, moveCaretPosition, paste, print, print, print, processInputMethodEvent, read, removeCaretListener, removeKeymap, removeNotify, restoreComposedText, saveComposedText, select, selectAll, setCaret, setCaretColor, setCaretPosition, setComponentOrientation, setDisabledTextColor, setDocument, setDragEnabled, setDropMode, setEditable, setFocusAccelerator, setHighlighter, setKeymap, setMargin, setNavigationFilter, setSelectedTextColor, setSelectionColor, setSelectionEnd, setSelectionStart, setUI, updateUI, viewToModel, write
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public static final int THIS_CELL
public static final int THIS_COLUMN
public static final int THIS_ROW
public static final int ALL_CELLS
public static final java.lang.String DEFAULT_TABLE_WIDTH
public static final java.lang.String DEFAULT_VERTICAL_ALIGN
public static final java.lang.String newListItemAction
public static final java.lang.String insertLineBreakAction
public static final java.lang.String deletePrevCharAction
public static final java.lang.String deleteNextCharAction
public static final java.lang.String moveUpAction
public static final java.lang.String homeAction
public static final java.lang.String shiftHomeAction
public static final java.lang.String shiftEndAction
public static final java.lang.String endAction
public static final java.lang.String moveDownAction
public SHTMLEditorPane.PasteMode getPasteMode()
public void setPasteMode(SHTMLEditorPane.PasteMode pasteMode)
public void setPasteModeFromPrefs()
protected boolean processKeyBinding(javax.swing.KeyStroke ks, java.awt.event.KeyEvent e, int condition, boolean pressed)
processKeyBinding
in class javax.swing.JComponent
public void setText(java.lang.String sText)
setText
in class javax.swing.JEditorPane
sText
- the html-text of the documentpublic void applyListAttributes(javax.swing.text.AttributeSet a)
a
- the set of attributes to applypublic void toggleList(java.lang.String listTag, javax.swing.text.AttributeSet attributeSet, boolean forceOff)
Switches list display on for the given type, if the selection contains parts not formatted as list or parts formatted as list of another type.
Switches list formatting off, if the selection contains only parts formatted as list of the given type.
listTag
- the list tag type to toggle on or off (UL or OL)attributeSet
- the attributes to use for the list to toggle toforceOff
- indicator for toggle operation. If true, possibly
exisiting list formatting inside the selected parts always is switched
off. If false, the method decides, if list formatting for the parts
inside the selection needs to be switched on or off.public void insertNewTable(int colCount)
colCount
- the number of columns the new table shall havepublic void insertAnchor(java.lang.String anchorName)
If nothing is selected, this method does nothing
anchorName
- the name of the new anchorpublic void insertBreak()
public void setLink(java.lang.String linkText, java.lang.String href, java.lang.String className)
If nothing is selected, but the caret is inside a link, this will replace the existing link. If nothing is selected and the caret is not inside a link, this method does nothing.
linkText
- the text that shall appear as link at the current selectionhref
- the target this link shall refer toclassName
- the style class to be usedpublic void setLink(java.lang.String linkText, java.lang.String href, java.lang.String className, java.lang.String linkImage, java.awt.Dimension size)
linkText
- the text to show as link (or null, if an image shall appear instead)href
- the link referenceclassName
- the style name to be used for the linklinkImage
- the file name of the image be used for the link (or null, if a text link is to be set instead)size
- the size of the image or nullpublic void removeAnchor(java.lang.String anchorName)
anchorName
- the name of the anchor to removepublic void insertTableColumn()
public void appendTableColumn()
public void appendTableRow()
public void insertTableRow(java.lang.String forcedCellName)
public void deleteTableRow()
public void deleteTableCol()
width of adjacent column is adjusted, if there is more than one column in the table. Width adjustment only works, if width attributes of both the column to remove and its adjacent column have the same unit (pt or %).
If there is only one cell or if the caret is not in a table, this method does nothing
Smart border handling automatically sets the left border of a cell to zero, if the cell on the left of that cell has a right border and both cells have no margin. In that case removing the first column will cause all cells of the new first column to have no left border.
public void toggleTableHeaderCell()
public void applyTableAttributes(javax.swing.text.AttributeSet a)
a
- the set of attributes to applypublic void applyCellAttributes(javax.swing.text.AttributeSet a, int range)
a
- the set of attributes to applyrange
- the range of cells to apply attributes topublic SHTMLDocument getSHTMLDocument()
public void goNextCell(javax.swing.text.Element cell)
public void goPrevCell(javax.swing.text.Element cell)
public javax.swing.text.Element getCurrentTableCell()
public javax.swing.text.Element getCurrentLinkElement()
public javax.swing.text.Element getTableCell(int position)
public javax.swing.text.Element getCurrentParagraphElement()
public void replaceSelection(java.lang.String content)
replaceSelection
in class javax.swing.JEditorPane
public void replaceSelection(com.lightdev.app.shtm.HTMLText replacementHTMLText)
HTMLText
. 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 method overrides replaceSelection in JEditorPane
for usage
of our own HTMLText object.replacementHTMLText
- the content to replace the selection withpublic void initDnd()
DropTarget, DragSource and DragGestureRecognizer are instantiated and a MouseListener is established to track the selection in drag operations
this ideally is called in the constructor of a class which would like to implement drag and drop
public void dragGestureRecognized(java.awt.dnd.DragGestureEvent event)
dragGestureRecognized
in interface java.awt.dnd.DragGestureListener
public void dragDropEnd(java.awt.dnd.DragSourceDropEvent event)
dragDropEnd
in interface java.awt.dnd.DragSourceListener
public void dragOver(java.awt.dnd.DropTargetDragEvent event)
dragOver
in interface java.awt.dnd.DropTargetListener
public void drop(java.awt.dnd.DropTargetDropEvent event)
DataFlavor
, do the drop.drop
in interface java.awt.dnd.DropTargetListener
event
- - the event specifiying the drop operationDataFlavor
public void dropActionChanged(java.awt.dnd.DropTargetDragEvent event)
dropActionChanged
in interface java.awt.dnd.DropTargetListener
public void dropActionChanged(java.awt.dnd.DragSourceDragEvent event)
dropActionChanged
in interface java.awt.dnd.DragSourceListener
public void dragEnter(java.awt.dnd.DropTargetDragEvent event)
dragEnter
in interface java.awt.dnd.DropTargetListener
public void dragExit(java.awt.dnd.DropTargetEvent event)
dragExit
in interface java.awt.dnd.DropTargetListener
public void dragEnter(java.awt.dnd.DragSourceDragEvent event)
dragEnter
in interface java.awt.dnd.DragSourceListener
public void dragExit(java.awt.dnd.DragSourceEvent event)
dragExit
in interface java.awt.dnd.DragSourceListener
public void dragOver(java.awt.dnd.DragSourceDragEvent event)
dragOver
in interface java.awt.dnd.DragSourceListener
public javax.swing.TransferHandler getTransferHandler()
getTransferHandler
in class javax.swing.JComponent
public void removeCharacterAttributes()
public void removeParagraphAttributes()
public void applyAttributes(javax.swing.text.AttributeSet attributeSet, boolean applyToCompleteParagraph)
public void applyAttributes(javax.swing.text.AttributeSet attributeSet, boolean applyToCompleteParagraph, boolean replace)
attributeSet
- the set of attributes to applyapplyToCompleteParagraph
- true, if the attributes shall be applied to the whole
paragraph, false, if only the selected range of characters shall have themreplace
- true, if existing attribtes are to be replaced, false if notpublic void applyCharacterTag(java.lang.String tag)
public void applyParagraphTag(java.lang.String tag, java.util.Vector overwritableTags)
tag
- the tag name to switche elements tooverwritableTags
- Tags that may be overwritten by the new tag.public javax.swing.JPopupMenu getPopup()
public void setPopup(javax.swing.JPopupMenu popup)
public java.lang.String elementToHTML(javax.swing.text.Element element)
public boolean tryDefaultKeyStrokeActionWithinCell(int keyCode, int modifiers, java.awt.event.ActionEvent event)