public class TextAreaFigure extends AbstractAttributedDecoratedFigure implements TextHolderFigure
TextHolderFigure
which holds multiple lines of text in a
rectangular area.
It automatically rearranges the text to fit its allocated display area,
breaking the lines at word boundaries whenever possible.
The text can contain either LF or CRLF sequences to separate paragraphs,
as well as tab characters for table like formatting and alignment.
Currently the tabs are distributed at regular intervals as determined by
the TabSize property. Tabs align correctly with either fixed
or variable fonts.
If, when resizing, the vertical size of the display box is not enough to
display all the text, TextAreaFigure displays a dashed red line at the
bottom of the figure to indicate there is hidden text.
TextAreFigure uses all standard attributes for the area Rectangle2D.Double,
ie: FillColor, PenColor for the border, FontSize, FontStyle, and FontName,
as well as four additional attributes LeftMargin, RightMargin, TopMargin,
and TabSize.
A DrawingEditor should provide the TextAreaCreationTool to create a TextAreaFigure.
FIXME - TextAreaFigure should not draw a rectangle on its own but rather rely on a decorator. We probably need a DecoratorConnector for this and we need a way to specify the inner bounds of the decorator. We also need a way to center the text of the TextAreaFigure verticaly and horizontaly.
Modifier and Type | Field and Description |
---|---|
protected java.awt.geom.Rectangle2D.Double |
bounds |
protected boolean |
editable |
changingDepth, listenerList
propertySupport
CONNECTABLE_PROPERTY, REMOVABLE_PROPERTY, SELECTABLE_PROPERTY, TRANSFORMABLE_PROPERTY
Constructor and Description |
---|
TextAreaFigure()
Creates a new instance.
|
TextAreaFigure(java.lang.String text) |
Modifier and Type | Method and Description |
---|---|
TextAreaFigure |
clone()
Returns a clone of the figure, with clones of all aggregated figures,
such as children and decorators.
|
java.util.Collection<Handle> |
createHandles(int detailLevel)
Creates handles used to manipulate the figure.
|
protected void |
drawFill(java.awt.Graphics2D g)
This method is called by method draw() to draw the fill
area of the figure.
|
protected void |
drawStroke(java.awt.Graphics2D g)
This method is called by method draw() to draw the text of the figure
.
|
protected void |
drawText(java.awt.Graphics2D g) |
boolean |
figureContains(java.awt.geom.Point2D.Double p) |
double |
getBaseline()
Gets the baseline of the first line of text, relative to the
upper left corner of the figure bounds.
|
java.awt.geom.Rectangle2D.Double |
getBounds()
Returns the untransformed logical bounds of the figure as a Rectangle.
|
java.awt.Color |
getFillColor()
Returns the fill color to be used by a text editor for editing this Figure.
|
java.awt.Font |
getFont()
Returns the font to be used by a text editor for editing this Figure.
|
float |
getFontSize()
Gets the font size of the text held by the TextHolderFigure.
|
Insets2D.Double |
getInsets()
Returns the insets used to draw text.
|
TextHolderFigure |
getLabelFor()
Sometimes we want to use a TextHolderFigure as a label for another
TextHolderFigure.
|
Dimension2DDouble |
getPreferredTextSize(double maxWidth)
Returns the preferred text size of the TextAreaFigure.
|
int |
getTabSize()
Gets the number of characters used to expand tabs.
|
java.lang.String |
getText()
Gets the text shown by the text figure.
|
java.awt.Color |
getTextColor()
Returns the text color to be used by a text editor for editing this Figure.
|
int |
getTextColumns()
Gets the number of columns to be overlaid when the figure is edited.
|
Tool |
getTool(java.awt.geom.Point2D.Double p)
Returns a specialized tool for the given coordinate.
|
java.lang.Object |
getTransformRestoreData()
Gets data which can be used to restore the transformation of the figure
without loss of precision, after a transform has been applied to it.
|
void |
invalidate()
Invalidates cached data of the Figure.
|
boolean |
isEditable()
Returns true if the text of the TextHolderFigure can be edited.
|
boolean |
isTextOverflow()
Returns true, if the text does not fit into the bounds of the Figure.
|
void |
read(DOMInput in) |
protected void |
readBounds(DOMInput in) |
void |
restoreTransformTo(java.lang.Object geometry)
Restores the transform of the figure to a previously stored state.
|
void |
setBounds(java.awt.geom.Point2D.Double anchor,
java.awt.geom.Point2D.Double lead)
Sets the logical and untransformed bounds of the figure.
|
void |
setEditable(boolean b) |
void |
setFontSize(float size)
Sets the font size of the text held by the TextHolderFigure.
|
void |
setText(java.lang.String newText)
Sets the text shown by the text figure.
|
void |
transform(java.awt.geom.AffineTransform tx)
Transforms the shape of the Figure.
|
void |
write(DOMOutput out) |
protected void |
writeBounds(DOMOutput out) |
contains, draw, drawDecorator, drawFigure, getDecorator, getDrawingArea, getFigureDrawingArea, readDecorator, setDecorator, updateDecoratorBounds, writeDecorator
applyAttributesTo, get, getAttributeKey, getAttributes, getAttributesRestoreData, getStroke, getStrokeMiterLimitFactor, hasAttribute, isAttributeEnabled, readAttributes, removeAttribute, restoreAttributesTo, set, setAttributeEnabled, setAttributes, writeAttributes
addFigureListener, addNotify, changed, findCompatibleConnector, findConnector, findFigureInside, fireAreaInvalidated, fireAreaInvalidated, fireAreaInvalidated, fireAttributeChanged, fireFigureAdded, fireFigureChanged, fireFigureChanged, fireFigureChanged, fireFigureHandlesChanged, fireFigureRemoved, fireFigureRequestRemove, fireUndoableEditHappened, getActions, getChangingDepth, getConnectors, getCursor, getDecomposition, getDrawing, getEndPoint, getFontRenderContext, getLayer, getLock, getPreferredSize, getStartPoint, getToolTipText, handleDrop, handleMouseClick, includes, isChanging, isConnectable, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, requestRemove, setBounds, setConnectable, setRemovable, setSelectable, setTransformable, setVisible, toString, validate, willChange
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
addFigureListener, addNotify, addPropertyChangeListener, changed, contains, draw, findCompatibleConnector, findConnector, findFigureInside, get, getActions, getAttributes, getAttributesRestoreData, getConnectors, getCursor, getDecomposition, getDrawingArea, getEndPoint, getLayer, getPreferredSize, getStartPoint, getToolTipText, handleDrop, handleMouseClick, includes, isConnectable, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, removePropertyChangeListener, requestRemove, restoreAttributesTo, set, willChange
protected java.awt.geom.Rectangle2D.Double bounds
protected boolean editable
public TextAreaFigure()
public TextAreaFigure(java.lang.String text)
protected void drawText(java.awt.Graphics2D g)
drawText
in class AbstractAttributedFigure
protected void drawFill(java.awt.Graphics2D g)
AbstractAttributedFigure
drawFill
in class AbstractAttributedFigure
protected void drawStroke(java.awt.Graphics2D g)
AbstractAttributedFigure
drawStroke
in class AbstractAttributedFigure
public void setBounds(java.awt.geom.Point2D.Double anchor, java.awt.geom.Point2D.Double lead)
Figure
This is used by Tool's which create a new Figure and by Tool's which connect a Figure to another Figure.
This is a basic operation which does not fire events. Use the following code sequence, if you need event firing:
figure.willChange(); figure.setBounds(...); figure.changed();
setBounds
in interface Figure
setBounds
in class AbstractFigure
anchor
- the start point of the boundslead
- the end point of the boundsFigure.getBounds()
public void transform(java.awt.geom.AffineTransform tx)
Figure
This is a basic operation which does not fire events. Use the following code sequence, if you need event firing:
figure.willChange(); figure.transform(...); figure.changed();
transform
in interface Figure
tx
- The transformation.Figure.getTransformRestoreData()
,
Figure.restoreTransformTo(java.lang.Object)
public boolean figureContains(java.awt.geom.Point2D.Double p)
figureContains
in class AbstractAttributedDecoratedFigure
public java.awt.geom.Rectangle2D.Double getBounds()
Figure
The bounds are used by Handle objects for adjusting the figure and for aligning the figure on a grid.
public void restoreTransformTo(java.lang.Object geometry)
Figure
restoreTransformTo
in interface Figure
public java.lang.Object getTransformRestoreData()
Figure
getTransformRestoreData
in interface Figure
Figure.transform(AffineTransform)
public java.lang.String getText()
getText
in interface TextHolderFigure
public Insets2D.Double getInsets()
getInsets
in interface TextHolderFigure
public double getBaseline()
TextHolderFigure
getBaseline
in interface TextHolderFigure
public int getTabSize()
TextHolderFigure
getTabSize
in interface TextHolderFigure
public void setText(java.lang.String newText)
setText
in interface TextHolderFigure
public int getTextColumns()
TextHolderFigure
getTextColumns
in interface TextHolderFigure
public java.awt.Font getFont()
TextHolderFigure
getFont
in interface TextHolderFigure
public java.awt.Color getTextColor()
TextHolderFigure
getTextColor
in interface TextHolderFigure
public java.awt.Color getFillColor()
TextHolderFigure
getFillColor
in interface TextHolderFigure
public void setFontSize(float size)
TextHolderFigure
setFontSize
in interface TextHolderFigure
public float getFontSize()
TextHolderFigure
getFontSize
in interface TextHolderFigure
public boolean isEditable()
TextHolderFigure
isEditable
in interface TextHolderFigure
public void setEditable(boolean b)
public Tool getTool(java.awt.geom.Point2D.Double p)
Returns null, if no specialized tool is available.
getTool
in interface Figure
getTool
in class AbstractFigure
public TextHolderFigure getLabelFor()
TextHolderFigure
getLabelFor
in interface TextHolderFigure
public TextAreaFigure clone()
Figure
clone
in interface Figure
clone
in class AbstractAttributedDecoratedFigure
public java.util.Collection<Handle> createHandles(int detailLevel)
Figure
createHandles
in interface Figure
createHandles
in class AbstractFigure
detailLevel
- The detail level of the handles. Usually this is 0 for
bounding box handles and 1 for point handles. The value -1 is used
by the SelectAreaTracker and the HandleTracker to highlight figures, over which the mouse
pointer is hovering.Handle
protected void readBounds(DOMInput in) throws java.io.IOException
java.io.IOException
protected void writeBounds(DOMOutput out) throws java.io.IOException
java.io.IOException
public void read(DOMInput in) throws java.io.IOException
read
in interface DOMStorable
read
in class AbstractAttributedDecoratedFigure
java.io.IOException
public void write(DOMOutput out) throws java.io.IOException
write
in interface DOMStorable
write
in class AbstractAttributedDecoratedFigure
java.io.IOException
public void invalidate()
AbstractFigure
invalidate
in class AbstractFigure
public boolean isTextOverflow()
TextHolderFigure
isTextOverflow
in interface TextHolderFigure
public Dimension2DDouble getPreferredTextSize(double maxWidth)
If you want to use this method to determine the bounds of the TextAreaFigure, you need to add the insets of the TextAreaFigure to the size.
maxWidth
- the maximal width to use. Specify Double.MAX_VALUE
if you want the width to be unlimited.