public class BoxView extends CompositeView
Layout for each axis is handled separately by the methods layoutMajorAxis and layoutMinorAxis. Subclasses can change the layout algorithm by reimplementing these methods. These methods will be called as necessary depending upon whether or not there is cached layout information and the cache is considered valid. These methods are typically called if the given size along the axis changes, or if layoutChanged is called to force an updated layout. The layoutChanged method invalidates cached layout information, if there is any. The requirements published to the parent view are calculated by the methods calculateMajorAxisRequirements and calculateMinorAxisRequirements. If the layout algorithm is changed, these methods will likely need to be reimplemented.
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXISBOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST| Constructor and Description |
|---|
BoxView(Element
Constructs a
BoxView.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
baselineLayout(int targetSpan, int axis, int[] offsets, int[] spans)
Computes the location and extent of each child view in this
BoxView given the
targetSpan, which is the width (or height) of the region we have to work with.
|
protected SizeRequirements |
baselineRequirements(int axis, SizeRequirements
Calculates the size requirements for this
BoxView by examining the size of each child view.
|
protected SizeRequirements |
calculateMajorAxisRequirements(int axis, SizeRequirements
Calculates the size requirements for the major axis
axis.
|
protected SizeRequirements |
calculateMinorAxisRequirements(int axis, SizeRequirements
Calculates the size requirements for the minor axis
axis.
|
protected void |
childAllocation(int index, Rectangle
Allocates a region for a child view.
|
protected boolean |
flipEastAndWestAtEnds(int position, Position
Determines in which direction the next view lays.
|
protected void |
forwardUpdate(DocumentEvent
Forwards the given
DocumentEvent to the child views that need to be notified of the change to the model.
|
float |
getAlignment(int axis)
Determines the desired alignment for this view along an axis.
|
int |
getAxis()
Fetches the tile axis property.
|
Shape |
getChildAllocation(int index, Shape
Fetches the allocation for the given child view.
|
int |
getHeight()
Returns the current height of the box.
|
float |
getMaximumSpan(int axis)
Determines the maximum span for this view along an axis.
|
float |
getMinimumSpan(int axis)
Determines the minimum span for this view along an axis.
|
protected int |
getOffset(int axis, int childIndex)
Fetches the offset of a particular child's current layout.
|
float |
getPreferredSpan(int axis)
Determines the preferred span for this view along an axis.
|
int |
getResizeWeight(int axis)
Gets the resize weight.
|
protected int |
getSpan(int axis, int childIndex)
Fetches the span of a particular child's current layout.
|
protected View |
getViewAtPoint(int x, int y, Rectangle
Fetches the child view at the given coordinates.
|
int |
getWidth()
Returns the current width of the box.
|
protected boolean |
isAfter(int x, int y, Rectangle
Determines if a point falls after an allocated region.
|
protected boolean |
isAllocationValid()
Are the allocations for the children still valid?
|
protected boolean |
isBefore(int x, int y, Rectangle
Determines if a point falls before an allocated region.
|
protected boolean |
isLayoutValid(int axis)
Determines if the layout is valid along the given axis.
|
protected void |
layout(int width, int height)
Perform layout on the box
|
void |
layoutChanged(int axis)
Invalidates the layout along an axis.
|
protected void |
layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
Performs layout for the major axis of the box (i.e.
|
protected void |
layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
Performs layout for the minor axis of the box (i.e.
|
Shape |
modelToView(int pos, Shape
Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it.
|
void |
paint(Graphics
Renders the
BoxView using the given rendering surface and area on that surface.
|
protected void |
paintChild(Graphics
Paints a child.
|
void |
preferenceChanged(View
This is called by a child to indicate its preferred span has changed.
|
void |
replace(int index, int length, View
Invalidates the layout and resizes the cache of requests/allocations.
|
void |
setAxis(int axis)
Sets the tile axis property.
|
void |
setSize(float width, float height)
Sets the size of the view.
|
int |
viewToModel(float x, float y, Shape
Provides a mapping from the view coordinate space to the logical coordinate space of the model.
|
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, getViewIndexAtPosition, loadChildren, modelToView, setInsets, setParagraphInsets, setParentappend, breakView, changedUpdate, createFragment, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, insertUpdate, isVisible, modelToView, remove, removeAll, removeUpdate, updateChildren, updateLayout, viewToModelpublic BoxView(Elementelem, int axis)
BoxView.
elem - the element this view is responsible for
axis - either
View.X_AXIS or
View.Y_AXIS
public int getAxis()
View.X_AXIS or
View.Y_AXIS
public void setAxis(int axis)
axis - either
View.X_AXIS or
View.Y_AXIS
public void layoutChanged(int axis)
setSize method is called on this view (typically in paint).
axis - either
View.X_AXIS or
View.Y_AXIS
protected boolean isLayoutValid(int axis)
axis - either
View.X_AXIS or
View.Y_AXIS
protected void paintChild(Graphicsg, Rectangle alloc, int index)
g - the graphics context
alloc - the allocated region to paint into
index - the child index, >= 0 && < getViewCount()
public void replace(int index,
int length,
View[] elems)
replace in class
CompositeView
index - the starting index into the child views to insert the new views; this should be a value >= 0 and <= getViewCount
length - the number of existing child views to remove; This should be a value >= 0 and <= (getViewCount() - offset)
elems - the child views to add; this value can be
nullto indicate no children are being added (useful to remove)
protected void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
DocumentEvent to the child views that need to be notified of the change to the model. If a child changed its requirements and the allocation was valid prior to forwarding the portion of the box from the starting child to the end of the box will be repainted.
forwardUpdate in class
View
ec - changes to the element this view is responsible for (may be
null if there were no changes)
e - the change information from the associated document
a - the current allocation of the view
f - the factory to use to rebuild if the view has children
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory) ,
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory) ,
View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void preferenceChanged(Viewchild, boolean width, boolean height)
preferenceChanged in class
View
child - the child view
width - true if the width preference should change
height - true if the height preference should change
JComponent.revalidate()
public int getResizeWeight(int axis)
getResizeWeight in class
View
axis - may be either
View.X_AXIS or
View.Y_AXIS
IllegalArgumentException - for an invalid axis
public void setSize(float width,
float height)
public void paint(Graphicsg, Shape allocation)
BoxView using the given rendering surface and area on that surface. Only the children that intersect the clip bounds of the given
Graphics will be rendered.
paint in class
View
g - the rendering surface to use
allocation - the allocated region to render into
View.paint(java.awt.Graphics, java.awt.Shape)
public ShapegetChildAllocation(int index, Shape a)
null if the layout is invalid, otherwise the superclass behavior is executed.
getChildAllocation in class
CompositeView
index - the index of the child, >= 0 && > getViewCount()
a - the allocation to this view
null if
a is
null; or
null if the layout is invalid
public ShapemodelToView(int pos, Shape a, Position .Bias b) throws BadLocationException
modelToView in class
CompositeView
pos - the position to convert >= 0
a - the allocated region to render into
b - a bias value of either
Position.Bias.Forward or
Position.Bias.Backward
BadLocationException - if the given position does not represent a valid location in the associated document
View.modelToView(int, java.awt.Shape, javax.swing.text.Position.Bias)
public int viewToModel(float x,
float y,
Shape a,
Position.Bias [] bias)
viewToModel in class
CompositeView
x - x coordinate of the view location to convert >= 0
y - y coordinate of the view location to convert >= 0
a - the allocated region to render into
bias - either
Position.Bias.Forward or
Position.Bias.Backward
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
public float getAlignment(int axis)
getAlignment in class
View
axis - may be either
View.X_AXIS or
View.Y_AXIS
IllegalArgumentException - for an invalid axis
public float getPreferredSpan(int axis)
getPreferredSpan in class
View
axis - may be either
View.X_AXIS or
View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
public float getMinimumSpan(int axis)
getMinimumSpan in class
View
axis - may be either
View.X_AXIS or
View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
public float getMaximumSpan(int axis)
getMaximumSpan in class
View
axis - may be either
View.X_AXIS or
View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
protected boolean isAllocationValid()
protected boolean isBefore(int x,
int y,
Rectangle innerAlloc)
isBefore in class
CompositeView
x - the X coordinate >= 0
y - the Y coordinate >= 0
innerAlloc - the allocated region; this is the area inside of the insets
protected boolean isAfter(int x,
int y,
Rectangle innerAlloc)
isAfter in class
CompositeView
x - the X coordinate >= 0
y - the Y coordinate >= 0
innerAlloc - the allocated region; this is the area inside of the insets
protected ViewgetViewAtPoint(int x, int y, Rectangle alloc)
getViewAtPoint in class
CompositeView
x - the X coordinate >= 0
y - the Y coordinate >= 0
alloc - the parents inner allocation on entry, which should be changed to the child's allocation on exit
protected void childAllocation(int index,
Rectangle alloc)
childAllocation in class
CompositeView
index - the index of the child view to allocate, >= 0 && < getViewCount()
alloc - the allocated region
protected void layout(int width,
int height)
width - the width (inside of the insets) >= 0
height - the height (inside of the insets) >= 0
public int getWidth()
public int getHeight()
protected void layoutMajorAxis(int targetSpan,
int axis,
int[] offsets,
int[] spans)
targetSpan - the total span given to the view, which would be used to layout the children
axis - the axis being layed out
offsets - the offsets from the origin of the view for each of the child views; this is a return value and is filled in by the implementation of this method
spans - the span of each child view; this is a return value and is filled in by the implementation of this method
protected void layoutMinorAxis(int targetSpan,
int axis,
int[] offsets,
int[] spans)
targetSpan - the total span given to the view, which would be used to layout the children
axis - the axis being layed out
offsets - the offsets from the origin of the view for each of the child views; this is a return value and is filled in by the implementation of this method
spans - the span of each child view; this is a return value and is filled in by the implementation of this method
protected SizeRequirementscalculateMajorAxisRequirements(int axis, SizeRequirements r)
axis.
axis - the axis being studied
r - the
SizeRequirements object; if
null one will be created
SizeRequirements object
SizeRequirements
protected SizeRequirementscalculateMinorAxisRequirements(int axis, SizeRequirements r)
axis.
axis - the axis being studied
r - the
SizeRequirements object; if
null one will be created
SizeRequirements object
SizeRequirements
protected void baselineLayout(int targetSpan,
int axis,
int[] offsets,
int[] spans)
BoxView given the
targetSpan, which is the width (or height) of the region we have to work with.
targetSpan - the total span given to the view, which would be used to layout the children
axis - the axis being studied, either
View.X_AXIS or
View.Y_AXIS
offsets - an empty array filled by this method with values specifying the location of each child view
spans - an empty array filled by this method with values specifying the extent of each child view
protected SizeRequirementsbaselineRequirements(int axis, SizeRequirements r)
BoxView by examining the size of each child view.
axis - the axis being studied
r - the
SizeRequirements object; if
null one will be created
SizeRequirements object
protected int getOffset(int axis,
int childIndex)
axis - the axis being studied
childIndex - the index of the requested child
protected int getSpan(int axis,
int childIndex)
axis - the axis being studied
childIndex - the index of the requested child
protected boolean flipEastAndWestAtEnds(int position,
Position.Bias bias)
Views are layed out from left to right, so that the
View to the EAST will be at index n + 1, and the
View to the WEST will be at index n - 1. In certain situations, such as with bidirectional text, it is possible that the
View to EAST is not at index n + 1, but rather at index n - 1, or that the
View to the WEST is not at index n - 1, but index n + 1. In this case this method would return true, indicating the
Views are layed out in descending order. Otherwise the method would return false indicating the
Views are layed out in ascending order.
If the receiver is laying its Views along the Y_AXIS, this will will return the value from invoking the same method on the View responsible for rendering position and bias. Otherwise this will return false.
flipEastAndWestAtEnds in class
CompositeView
position - position into the model
bias - either
Position.Bias.Forward or
Position.Bias.Backward
Views surrounding the
View responding for rendering
position and
bias are layed out in descending order; otherwise false