javax.swing.text
Class FlowView

java.lang.Object
  extended by javax.swing.text.View
      extended by javax.swing.text.CompositeView
          extended by javax.swing.text.BoxView
              extended by javax.swing.text.FlowView
All Implemented Interfaces:
SwingConstants
Direct Known Subclasses:
ParagraphView

public abstract class FlowView
extends BoxView

A View that can flows it's children into it's layout space. The FlowView manages a set of logical views (that are the children of the layoutPool field). These are translated at layout time into a set of physical views. These are the views that are managed as the real child views. Each of these child views represents a row and are laid out within a box using the superclasses behaviour. The concrete implementation of the rows must be provided by subclasses.


Nested Class Summary
static class FlowView.FlowStrategy
          A strategy for translating the logical views of a FlowView into the real views.
 
Field Summary
protected  View layoutPool
          Represents the logical child elements of this view, encapsulated within one parent view (an instance of a package private LogicalView class).
protected  int layoutSpan
          The span of the FlowView that should be flowed.
protected  FlowView.FlowStrategy strategy
          The FlowStrategy to use for translating between the logical and physical view.
 
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
FlowView(Element element, int axis)
          Creates a new FlowView for the given Element and axis.
 
Method Summary
protected  SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r)
          Calculates the size requirements of this BoxView along its minor axis, that is the axis opposite to the axis specified in the constructor.
 void changedUpdate(DocumentEvent changes, Shape a, ViewFactory vf)
          Receice notification that some attributes changed in the region that this view is responsible for.
protected abstract  View createRow()
          Creates a new view that represents a row within a flow.
 int getFlowAxis()
          Returns the axis along which the view should be flowed.
 int getFlowSpan(int index)
          Returns the span of the flow for the specified child view.
 int getFlowStart(int index)
          Returns the location along the flow axis where the flow span starts given a child view index.
protected  int getViewIndexAtPosition(int pos)
          Returns the index of the child View for the given model position.
 void insertUpdate(DocumentEvent changes, Shape a, ViewFactory vf)
          Receice notification that some content has been inserted in the region that this view is responsible for.
protected  void layout(int width, int height)
          Performs the layout of this view.
protected  void loadChildren(ViewFactory vf)
          Loads the children of this view.
 void removeUpdate(DocumentEvent changes, Shape a, ViewFactory vf)
          Receice notification that some content has been removed from the region that this view is responsible for.
 
Methods inherited from class javax.swing.text.BoxView
baselineLayout, baselineRequirements, calculateMajorAxisRequirements, childAllocation, flipEastAndWestAtEnds, forwardUpdate, getAlignment, getAxis, getChildAllocation, getHeight, getMaximumSpan, getMinimumSpan, getOffset, getPreferredSpan, getResizeWeight, getSpan, getViewAtPoint, getWidth, isAfter, isAllocationValid, isBefore, isLayoutValid, layoutChanged, layoutMajorAxis, layoutMinorAxis, modelToView, paint, paintChild, preferenceChanged, replace, setAxis, setSize, viewToModel
 
Methods inherited from class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, modelToView, setInsets, setParagraphInsets, setParent
 
Methods inherited from class javax.swing.text.View
append, breakView, createFragment, dump, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, isVisible, modelToView, remove, removeAll, updateChildren, updateLayout, viewToModel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

layoutSpan

protected int layoutSpan
The span of the FlowView that should be flowed.


layoutPool

protected View layoutPool
Represents the logical child elements of this view, encapsulated within one parent view (an instance of a package private LogicalView class). These will be translated to a set of real views that are then displayed on screen. This translation is performed by the inner class FlowView.FlowStrategy.


strategy

protected FlowView.FlowStrategy strategy
The FlowStrategy to use for translating between the logical and physical view.

Constructor Detail

FlowView

public FlowView(Element element,
                int axis)
Creates a new FlowView for the given Element and axis.

Parameters:
element - the element that is rendered by this FlowView
axis - the axis along which the view is tiled, either View.X_AXIS or View.Y_AXIS, the flow axis is orthogonal to this one
Method Detail

getFlowAxis

public int getFlowAxis()
Returns the axis along which the view should be flowed. This is orthogonal to the axis along which the boxes are tiled.

Returns:
the axis along which the view should be flowed

getFlowSpan

public int getFlowSpan(int index)
Returns the span of the flow for the specified child view. A flow layout can be shaped by providing different span values for different child indices. The default implementation returns the entire available span inside the view.

Parameters:
index - the index of the child for which to return the span
Returns:
the span of the flow for the specified child view

getFlowStart

public int getFlowStart(int index)
Returns the location along the flow axis where the flow span starts given a child view index. The flow can be shaped by providing different values here.

Parameters:
index - the index of the child for which to return the flow location
Returns:
the location along the flow axis where the flow span starts

createRow

protected abstract View createRow()
Creates a new view that represents a row within a flow.

Returns:
a view for a new row

loadChildren

protected void loadChildren(ViewFactory vf)
Loads the children of this view. The FlowView does not directly load its children. Instead it creates a logical view (layoutPool) which is filled by the logical child views. The real children are created at layout time and each represent one row. This method is called by View.setParent(javax.swing.text.View) in order to initialize the view.

Overrides:
loadChildren in class CompositeView
Parameters:
vf - the view factory to use for creating the child views
See Also:
CompositeView.setParent(javax.swing.text.View)

layout

protected void layout(int width,
                      int height)
Performs the layout of this view. If the span along the flow axis changed, this first calls FlowView.FlowStrategy.layout(javax.swing.text.FlowView) in order to rebuild the rows of this view. Then the superclass's behaviour is called to arrange the rows within the box.

Overrides:
layout in class BoxView
Parameters:
width - the width of the view
height - the height of the view

insertUpdate

public void insertUpdate(DocumentEvent changes,
                         Shape a,
                         ViewFactory vf)
Receice notification that some content has been inserted in the region that this view is responsible for. This calls FlowView.FlowStrategy.insertUpdate(javax.swing.text.FlowView, javax.swing.event.DocumentEvent, java.awt.Rectangle).

Overrides:
insertUpdate in class View
Parameters:
changes - the document event describing the changes
a - the current allocation of the view
vf - the view factory that is used for creating new child views

removeUpdate

public void removeUpdate(DocumentEvent changes,
                         Shape a,
                         ViewFactory vf)
Receice notification that some content has been removed from the region that this view is responsible for. This calls FlowView.FlowStrategy.removeUpdate(javax.swing.text.FlowView, javax.swing.event.DocumentEvent, java.awt.Rectangle).

Overrides:
removeUpdate in class View
Parameters:
changes - the document event describing the changes
a - the current allocation of the view
vf - the view factory that is used for creating new child views

changedUpdate

public void changedUpdate(DocumentEvent changes,
                          Shape a,
                          ViewFactory vf)
Receice notification that some attributes changed in the region that this view is responsible for. This calls FlowView.FlowStrategy.changedUpdate(javax.swing.text.FlowView, javax.swing.event.DocumentEvent, java.awt.Rectangle).

Overrides:
changedUpdate in class View
Parameters:
changes - the document event describing the changes
a - the current allocation of the view
vf - the view factory that is used for creating new child views

getViewIndexAtPosition

protected int getViewIndexAtPosition(int pos)
Returns the index of the child View for the given model position. This is implemented to iterate over the children of this view (the rows) and return the index of the first view that contains the given position.

Overrides:
getViewIndexAtPosition in class CompositeView
Parameters:
pos - the model position for whicht the child View is queried
Returns:
the index of the child View for the given model position

calculateMinorAxisRequirements

protected SizeRequirements calculateMinorAxisRequirements(int axis,
                                                          SizeRequirements r)
Calculates the size requirements of this BoxView along its minor axis, that is the axis opposite to the axis specified in the constructor. This is overridden and forwards the request to the logical view.

Overrides:
calculateMinorAxisRequirements in class BoxView
Parameters:
axis - the axis that is examined
r - 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