javax.swing.text
Class BoxView

java.lang.Object
  extended by javax.swing.text.View
      extended by javax.swing.text.CompositeView
          extended by javax.swing.text.BoxView
All Implemented Interfaces:
SwingConstants
Direct Known Subclasses:
BlockView, FlowView, FrameSetView, TableView, TableView.TableCell, TableView.TableRow, WrappedPlainView, ZoneView

public class BoxView
extends CompositeView

An implementation of CompositeView that arranges its children in a box along one axis. This is comparable to how the BoxLayout works, but for View children.


Field Summary
 
Fields inherited from class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
 
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
 
Constructor Summary
BoxView(Element element, int axis)
          Creates a new BoxView for the given Element and axis.
 
Method Summary
protected  void baselineLayout(int span, int axis, int[] offsets, int[] spans)
          Calculates the baseline layout of the children of this BoxView along the specified axis.
protected  SizeRequirements baselineRequirements(int axis, SizeRequirements sr)
          Calculates size requirements for a baseline layout.
protected  SizeRequirements calculateMajorAxisRequirements(int axis, SizeRequirements sr)
          Calculates the size requirements of this BoxView along its major axis, that is the axis specified in the constructor.
protected  SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements sr)
          Calculates the size requirements of this BoxView along its minor axis, that is the axis opposite to the axis specified in the constructor.
protected  void childAllocation(int index, Rectangle a)
          Computes the allocation for a child View.
protected  boolean flipEastAndWestAtEnds(int position, Position.Bias bias)
          Determines if the next view in horinzontal direction is located to the east or west of the view at position pos.
protected  void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory vf)
          Forwards the DocumentEvent to child views that need to get notified of the change to the model.
 float getAlignment(int axis)
          Returns the alignment for this box view for the specified axis.
 int getAxis()
          Returns the axis along which this BoxView is laid out.
 Shape getChildAllocation(int index, Shape a)
          Returns the child allocation for the child view with the specified index.
 int getHeight()
          Return the current height of the box.
 float getMaximumSpan(int axis)
          Returns the maximum span of this view along the specified axis.
 float getMinimumSpan(int axis)
          Returns the minimum span of this view along the specified axis.
protected  int getOffset(int axis, int childIndex)
          Returns the offset for the child view with the given index for the specified axis.
 float getPreferredSpan(int axis)
          Returns the preferred span of the content managed by this View along the specified axis.
 int getResizeWeight(int axis)
          Returns the resize weight of this view.
protected  int getSpan(int axis, int childIndex)
          Returns the span for the child view with the given index for the specified axis.
protected  View getViewAtPoint(int x, int y, Rectangle r)
          Returns the child View at the specified location.
 int getWidth()
          Return the current width of the box.
protected  boolean isAfter(int x, int y, Rectangle r)
          Returns true if the specified point lies after the given Rectangle, false otherwise.
protected  boolean isAllocationValid()
          Returns true if the cached allocations for the children are still valid, false otherwise.
protected  boolean isBefore(int x, int y, Rectangle r)
          Returns true if the specified point lies before the given Rectangle, false otherwise.
protected  boolean isLayoutValid(int axis)
          Returns true if the layout along the specified axis is valid, false otherwise.
protected  void layout(int width, int height)
          Lays out the children of this BoxView with the specified bounds.
 void layoutChanged(int axis)
          Marks the layout along the specified axis as invalid.
protected  void layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
          Performs the layout along the major axis of a BoxView.
protected  void layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
          Performs the layout along the minor axis of a BoxView.
 Shape modelToView(int pos, Shape a, Position.Bias bias)
          Maps the document model position pos to a Shape in the view coordinate space.
 void paint(Graphics g, Shape a)
          Renders the Element that is associated with this View.
protected  void paintChild(Graphics g, Rectangle alloc, int index)
          Paints the child View at the specified index.
 void preferenceChanged(View child, boolean width, boolean height)
          Called by a child View when its preferred span has changed.
 void replace(int offset, int length, View[] views)
          Replaces child views by some other child views.
 void setAxis(int axis)
          Sets the axis along which this BoxView is laid out.
 void setSize(float width, float height)
          Sets the size of the view.
 int viewToModel(float x, float y, Shape a, Position.Bias[] bias)
          Maps coordinates from the View's space into a position in the document model.
 
Methods inherited from class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, getViewIndexAtPosition, loadChildren, modelToView, setInsets, setParagraphInsets, setParent
 
Methods inherited from class javax.swing.text.View
append, breakView, changedUpdate, createFragment, dump, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, insertUpdate, isVisible, modelToView, remove, removeAll, removeUpdate, updateChildren, updateLayout, viewToModel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BoxView

public BoxView(Element element,
               int axis)
Creates a new BoxView for the given Element and axis. Valid values for the axis are View.X_AXIS and View.Y_AXIS.

Parameters:
element - the element that is rendered by this BoxView
axis - the axis along which the box is laid out
Method Detail

getAxis

public int getAxis()
Returns the axis along which this BoxView is laid out.

Returns:
the axis along which this BoxView is laid out
Since:
1.3

setAxis

public void setAxis(int axis)
Sets the axis along which this BoxView is laid out. Valid values for the axis are View.X_AXIS and View.Y_AXIS.

Parameters:
axis - the axis along which this BoxView is laid out
Since:
1.3

layoutChanged

public void layoutChanged(int axis)
Marks the layout along the specified axis as invalid. This is triggered automatically when any of the child view changes its preferences via preferenceChanged(View, boolean, boolean). The layout will be updated the next time when setSize(float, float) is called, typically from within the paint(Graphics, Shape) method. Valid values for the axis are View.X_AXIS and View.Y_AXIS.

Parameters:
axis - an int value
Since:
1.3

isLayoutValid

protected boolean isLayoutValid(int axis)
Returns true if the layout along the specified axis is valid, false otherwise. Valid values for the axis are View.X_AXIS and View.Y_AXIS.

Parameters:
axis - the axis
Returns:
true if the layout along the specified axis is valid, false otherwise
Since:
1.4

paintChild

protected void paintChild(Graphics g,
                          Rectangle alloc,
                          int index)
Paints the child View at the specified index. This method modifies the actual values in alloc so make sure you have a copy of the original values if you need them.

Parameters:
g - the Graphics context to paint to
alloc - the allocated region for the child to paint into
index - the index of the child to be painted
See Also:
childAllocation(int, Rectangle)

replace

public void replace(int offset,
                    int length,
                    View[] views)
Replaces child views by some other child views. If there are no views to remove (length == 0), the result is a simple insert, if there are no children to add (view == null) the result is a simple removal. In addition this invalidates the layout and resizes the internal cache for the child allocations. The old children's cached allocations can still be accessed (although they are not guaranteed to be valid), and the new children will have an initial offset and span of 0.

Overrides:
replace in class CompositeView
Parameters:
offset - the start offset from where to remove children
length - the number of children to remove
views - the views that replace the removed children

paint

public void paint(Graphics g,
                  Shape a)
Renders the Element that is associated with this View.

Specified by:
paint in class View
Parameters:
g - the Graphics context to render to
a - the allocated region for the Element

getPreferredSpan

public float getPreferredSpan(int axis)
Returns the preferred span of the content managed by this View along the specified axis.

Specified by:
getPreferredSpan in class View
Parameters:
axis - the axis
Returns:
the preferred span of this View.

getMaximumSpan

public float getMaximumSpan(int axis)
Returns the maximum span of this view along the specified axis. This returns Integer.MAX_VALUE for the minor axis and the preferred span for the major axis.

Overrides:
getMaximumSpan in class View
Parameters:
axis - the axis
Returns:
the maximum span of this view along the specified axis

getMinimumSpan

public float getMinimumSpan(int axis)
Returns the minimum span of this view along the specified axis. This calculates the minimum span using calculateMajorAxisRequirements(int, javax.swing.SizeRequirements) or calculateMinorAxisRequirements(int, javax.swing.SizeRequirements) (depending on the axis) and returns the resulting minimum span.

Overrides:
getMinimumSpan in class View
Parameters:
axis - the axis
Returns:
the minimum span of this view along the specified axis

baselineRequirements

protected SizeRequirements baselineRequirements(int axis,
                                                SizeRequirements sr)
Calculates size requirements for a baseline layout. This is not used by the BoxView itself, but by subclasses that wish to perform a baseline layout, like the FlowView's rows.

Parameters:
axis - the axis that is examined
sr - the SizeRequirements object to hold the result, if null, a new one is created
Returns:
the size requirements for this BoxView along the specified axis

baselineLayout

protected void baselineLayout(int span,
                              int axis,
                              int[] offsets,
                              int[] spans)
Calculates the baseline layout of the children of this BoxView along the specified axis. This is not used by the BoxView itself, but by subclasses that wish to perform a baseline layout, like the FlowView's rows.

Parameters:
span - the target span
axis - the axis that is examined
offsets - an empty array, filled with the offsets of the children
spans - an empty array, filled with the spans of the children

calculateMajorAxisRequirements

protected SizeRequirements calculateMajorAxisRequirements(int axis,
                                                          SizeRequirements sr)
Calculates the size requirements of this BoxView along its major axis, that is the axis specified in the constructor.

Parameters:
axis - the axis that is examined
sr - the SizeRequirements object to hold the result, if null, a new one is created
Returns:
the size requirements for this BoxView along the specified axis

calculateMinorAxisRequirements

protected SizeRequirements calculateMinorAxisRequirements(int axis,
                                                          SizeRequirements sr)
Calculates the size requirements of this BoxView along its minor axis, that is the axis opposite to the axis specified in the constructor.

Parameters:
axis - the axis that is examined
sr - the SizeRequirements object to hold the result, if null, a new one is created
Returns:
the size requirements for this BoxView along the specified axis

isBefore

protected boolean isBefore(int x,
                           int y,
                           Rectangle r)
Returns true if the specified point lies before the given Rectangle, false otherwise. "Before" is typically defined as being to the left or above.

Specified by:
isBefore in class CompositeView
Parameters:
x - the X coordinate of the point
y - the Y coordinate of the point
r - the rectangle to test the point against
Returns:
true if the specified point lies before the given Rectangle, false otherwise

isAfter

protected boolean isAfter(int x,
                          int y,
                          Rectangle r)
Returns true if the specified point lies after the given Rectangle, false otherwise. "After" is typically defined as being to the right or below.

Specified by:
isAfter in class CompositeView
Parameters:
x - the X coordinate of the point
y - the Y coordinate of the point
r - the rectangle to test the point against
Returns:
true if the specified point lies after the given Rectangle, false otherwise

getViewAtPoint

protected View getViewAtPoint(int x,
                              int y,
                              Rectangle r)
Returns the child View at the specified location.

Specified by:
getViewAtPoint in class CompositeView
Parameters:
x - the X coordinate
y - the Y coordinate
r - the inner allocation of this BoxView on entry, the allocation of the found child on exit
Returns:
the child View at the specified location

childAllocation

protected void childAllocation(int index,
                               Rectangle a)
Computes the allocation for a child View. The parameter a stores the allocation of this CompositeView and is then adjusted to hold the allocation of the child view.

Specified by:
childAllocation in class CompositeView
Parameters:
index - the index of the child View
a - the allocation of this CompositeView before the call, the allocation of the child on exit

layout

protected void layout(int width,
                      int height)
Lays out the children of this BoxView with the specified bounds.

Parameters:
width - the width of the allocated region for the children (that is the inner allocation of this BoxView
height - the height of the allocated region for the children (that is the inner allocation of this BoxView

layoutMajorAxis

protected void layoutMajorAxis(int targetSpan,
                               int axis,
                               int[] offsets,
                               int[] spans)
Performs the layout along the major axis of a BoxView.

Parameters:
targetSpan - the (inner) span of the BoxView in which to layout the children
axis - the axis along which the layout is performed
offsets - the array that holds the offsets of the children on exit
spans - the array that holds the spans of the children on exit

layoutMinorAxis

protected void layoutMinorAxis(int targetSpan,
                               int axis,
                               int[] offsets,
                               int[] spans)
Performs the layout along the minor axis of a BoxView.

Parameters:
targetSpan - the (inner) span of the BoxView in which to layout the children
axis - the axis along which the layout is performed
offsets - the array that holds the offsets of the children on exit
spans - the array that holds the spans of the children on exit

isAllocationValid

protected boolean isAllocationValid()
Returns true if the cached allocations for the children are still valid, false otherwise.

Returns:
true if the cached allocations for the children are still valid, false otherwise

getWidth

public int getWidth()
Return the current width of the box. This is the last allocated width.

Returns:
the current width of the box

getHeight

public int getHeight()
Return the current height of the box. This is the last allocated height.

Returns:
the current height of the box

setSize

public void setSize(float width,
                    float height)
Sets the size of the view. If the actual size has changed, the layout is updated accordingly.

Overrides:
setSize in class View
Parameters:
width - the new width
height - the new height

getSpan

protected int getSpan(int axis,
                      int childIndex)
Returns the span for the child view with the given index for the specified axis.

Parameters:
axis - the axis to examine, either X_AXIS or Y_AXIS
childIndex - the index of the child for for which to return the span
Returns:
the span for the child view with the given index for the specified axis

getOffset

protected int getOffset(int axis,
                        int childIndex)
Returns the offset for the child view with the given index for the specified axis.

Parameters:
axis - the axis to examine, either X_AXIS or Y_AXIS
childIndex - the index of the child for for which to return the span
Returns:
the offset for the child view with the given index for the specified axis

getAlignment

public float getAlignment(int axis)
Returns the alignment for this box view for the specified axis. The axis that is tiled (the major axis) will be requested to be aligned centered (0.5F). The minor axis alignment depends on the child view's total alignment.

Overrides:
getAlignment in class View
Parameters:
axis - the axis which is examined
Returns:
the alignment for this box view for the specified axis

preferenceChanged

public void preferenceChanged(View child,
                              boolean width,
                              boolean height)
Called by a child View when its preferred span has changed.

Overrides:
preferenceChanged in class View
Parameters:
width - indicates that the preferred width of the child changed.
height - indicates that the preferred height of the child changed.
child - the child View.

modelToView

public Shape modelToView(int pos,
                         Shape a,
                         Position.Bias bias)
                  throws BadLocationException
Maps the document model position pos to a Shape in the view coordinate space. This method overrides CompositeView's method to make sure the children are allocated properly before calling the super's behaviour.

Overrides:
modelToView in class CompositeView
Parameters:
pos - the position of the character in the model
a - the area that is occupied by the view
bias - either Position.Bias.Forward or Position.Bias.Backward depending on the preferred direction bias. If null this defaults to Position.Bias.Forward
Returns:
a rectangle that gives the location of the document position inside the view coordinate space
Throws:
BadLocationException - if pos is invalid

getResizeWeight

public int getResizeWeight(int axis)
Returns the resize weight of this view. A value of 0 or less means this view is not resizeable. Positive values make the view resizeable. This implementation returns 0 for the major axis and 1 for the minor axis of this box view.

Overrides:
getResizeWeight in class View
Parameters:
axis - the axis
Returns:
the resizability of this view along the specified axis
Throws:
IllegalArgumentException - if axis is invalid

getChildAllocation

public Shape getChildAllocation(int index,
                                Shape a)
Returns the child allocation for the child view with the specified index. If the layout is invalid, this returns null.

Overrides:
getChildAllocation in class CompositeView
Parameters:
index - the child view index
a - the allocation to this view
Returns:
the child allocation for the child view with the specified index or null if the layout is invalid or a is null

forwardUpdate

protected void forwardUpdate(DocumentEvent.ElementChange ec,
                             DocumentEvent e,
                             Shape a,
                             ViewFactory vf)
Description copied from class: View
Forwards the DocumentEvent to child views that need to get notified of the change to the model. This calles View.forwardUpdateToView(javax.swing.text.View, javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory) for each View that must be forwarded to. If ec is not null (this means there have been structural changes to the element that this view is responsible for) this method should recognize this and don't notify newly added child views.

Overrides:
forwardUpdate in class View
Parameters:
ec - the ElementChange describing the element changes (may be null if there were no changes)
e - the DocumentEvent describing the changes to the model
a - the current allocation of the view
vf - the ViewFactory used to create new Views

viewToModel

public int viewToModel(float x,
                       float y,
                       Shape a,
                       Position.Bias[] bias)
Description copied from class: CompositeView
Maps coordinates from the View's space into a position in the document model.

Overrides:
viewToModel in class CompositeView
Parameters:
x - the x coordinate in the view space, x >= 0
y - the y coordinate in the view space, y >= 0
a - the allocation of this View
bias - the bias to use
Returns:
the position in the document that corresponds to the screen coordinates x, y >= 0

flipEastAndWestAtEnds

protected boolean flipEastAndWestAtEnds(int position,
                                        Position.Bias bias)
Description copied from class: CompositeView
Determines if the next view in horinzontal direction is located to the east or west of the view at position pos. Usually the Views are laid out from the east to the west, so we unconditionally return false here. Subclasses that support bidirectional text may wish to override this method.

Overrides:
flipEastAndWestAtEnds in class CompositeView
Parameters:
position - the position in the document
bias - the bias to be applied to pos
Returns:
true if the next View is located to the EAST, false otherwise