javax.swing.text
Class TableView

java.lang.Object
  |
  +--javax.swing.text.View
        |
        +--javax.swing.text.CompositeView
              |
              +--javax.swing.text.BoxView
                    |
                    +--javax.swing.text.TableView
All Implemented Interfaces:
SwingConstants

public abstract class TableView
extends BoxView

Unsafe:

Implements View interface for a table, that is composed of an element structure where the child elements of the element this view is responsible for represent rows and the child elements of the row elements are cells. The cell elements can have an arbitrary element structure under them, which will be built with the ViewFactory returned by the getViewFactory method.


    TABLE
      ROW
        CELL
        CELL
      ROW
        CELL
        CELL

 

This is implemented as a hierarchy of boxes, the table itself is a vertical box, the rows are horizontal boxes, and the cells are vertical boxes. The cells are allowed to span multiple columns and rows. By default, the table can be thought of as being formed over a grid (i.e. somewhat like one would find in gridbag layout), where table cells can request to span more than one grid cell. The default horizontal span of table cells will be based upon this grid, but can be changed by reimplementing the requested span of the cell (i.e. table cells can have independant spans if desired).

Version:
1.30 12/03/01
Author:
Timothy Prinzing
See Also:
View

Field Summary
(package private)  int[] columnOffsets
           
(package private)  SizeRequirements[] columnRequirements
           
(package private)  int[] columnSpans
           
private static BitSet EMPTY
           
(package private)  boolean gridValid
           
(package private)  Vector rows
           
 
Fields inherited from class javax.swing.text.BoxView
majorAllocValid, majorAxis, majorOffsets, majorRequest, majorReqValid, majorSpan, majorSpans, minorAllocValid, minorOffsets, minorRequest, minorReqValid, minorSpan, minorSpans, tempRect
 
Fields inherited from class javax.swing.text.CompositeView
 
Fields inherited from class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, sharedBiasReturn, 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
TableView(Element elem)
          Suppressed: Constructs a TableView for the given element.
 
Method Summary
(package private)  void addFill(int row, int col)
          Mark a grid location as filled in for a cells overflow.
(package private)  void calculateColumnRequirements(int axis)
          Calculate the requirements for each column.
protected  SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r)
          Calculate the requirements for the minor axis.
(package private)  void checkMultiColumnCell(int axis, int col, int ncols, View v)
          check the requirements of a table cell that spans multiple columns.
(package private)  void checkSingleColumnCell(int axis, int col, View v)
          check the requirements of a table cell that spans a single column.
protected  javax.swing.text.TableView.TableCell createTableCell(Element elem)
          Deprecated. Table cells can now be any arbitrary View implementation and should be produced by the ViewFactory rather than the table.
protected  javax.swing.text.TableView.TableRow createTableRow(Element elem)
          Creates a new table row.
protected  void forwardUpdate(javax.swing.event.DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
          Forwards the given DocumentEvent to the child views that need to be notified of the change to the model.
(package private)  int getColumnCount()
          The number of columns in the table.
(package private)  int getColumnsOccupied(View v)
          Determines the number of columns occupied by the table cell represented by given element.
(package private)  int getColumnSpan(int col)
          Fetches the span (width) of the given column.
(package private)  javax.swing.text.TableView.TableRow getRow(int row)
           
(package private)  int getRowCount()
          The number of rows in the table.
(package private)  int getRowsOccupied(View v)
          Determines the number of rows occupied by the table cell represented by given element.
(package private)  int getRowSpan(int row)
          Fetches the span (height) of the given row.
protected  View getViewAtPosition(int pos, Rectangle a)
          Fetches the child view that represents the given position in the model.
(package private)  void invalidateGrid()
           
protected  void layoutColumns(int targetSpan, int[] offsets, int[] spans, SizeRequirements[] reqs)
          Layout the columns to fit within the given target span.
protected  void layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
          Perform layout for the minor axis of the box (i.e.
 void replace(int offset, int length, View[] views)
          Suppressed: Change the child views.
(package private)  void updateGrid()
          Fill in the grid locations that are placeholders for multi-column, multi-row, and missing grid locations.
 
Methods inherited from class javax.swing.text.BoxView
baselineLayout, baselineRequirements, calculateMajorAxisRequirements, checkRequests, childAllocation, flipEastAndWestAtEnds, getAlignment, getAxis, getChildAllocation, getHeight, getMaximumSpan, getMinimumSpan, getOffset, getPreferredSpan, getResizeWeight, getSpan, getSpanOnAxis, getViewAtPoint, getWidth, isAfter, isAllocationValid, isBefore, isLayoutValid, layout, layoutChanged, layoutMajorAxis, modelToView, paint, paintChild, preferenceChanged, setAxis, setSize, setSpanOnAxis, updateChildSizes, updateLayoutArray, viewToModel
 
Methods inherited from class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewCount, getViewIndex, getViewIndexAtPosition, loadChildren, modelToView, setInsets, setParagraphInsets, setParent
 
Methods inherited from class javax.swing.text.View
append, 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, viewToModel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

columnSpans

int[] columnSpans

columnOffsets

int[] columnOffsets

columnRequirements

SizeRequirements[] columnRequirements

rows

Vector rows

gridValid

boolean gridValid

EMPTY

private static final BitSet EMPTY
Constructor Detail

TableView

public TableView(Element elem)
Suppressed: Constructs a TableView for the given element.

Parameters:
elem - the element that this view is responsible for
Method Detail

createTableRow

protected javax.swing.text.TableView.TableRow createTableRow(Element elem)
Creates a new table row.

Parameters:
elem - an element
Returns:
the row

createTableCell

protected javax.swing.text.TableView.TableCell createTableCell(Element elem)
Deprecated. Table cells can now be any arbitrary View implementation and should be produced by the ViewFactory rather than the table.

Parameters:
elem - an element
Returns:
the cell

getColumnCount

int getColumnCount()
The number of columns in the table.


getColumnSpan

int getColumnSpan(int col)
Fetches the span (width) of the given column. This is used by the nested cells to query the sizes of grid locations outside of themselves.


getRowCount

int getRowCount()
The number of rows in the table.


getRowSpan

int getRowSpan(int row)
Fetches the span (height) of the given row.


getRow

javax.swing.text.TableView.TableRow getRow(int row)

getColumnsOccupied

int getColumnsOccupied(View v)
Determines the number of columns occupied by the table cell represented by given element.


getRowsOccupied

int getRowsOccupied(View v)
Determines the number of rows occupied by the table cell represented by given element.


invalidateGrid

void invalidateGrid()

forwardUpdate

protected void forwardUpdate(javax.swing.event.DocumentEvent.ElementChange ec,
                             DocumentEvent e,
                             Shape a,
                             ViewFactory f)
Description copied from class: BoxView
Forwards the given 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.

Overrides:
forwardUpdate in class BoxView
Parameters:
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
See Also:
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)

replace

public void replace(int offset,
                    int length,
                    View[] views)
Suppressed: Change the child views. This is implemented to provide the superclass behavior and invalidate the grid so that rows and columns will be recalculated.

Overrides:
replace in class BoxView
Parameters:
offset - 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)

updateGrid

void updateGrid()
Fill in the grid locations that are placeholders for multi-column, multi-row, and missing grid locations.


addFill

void addFill(int row,
             int col)
Mark a grid location as filled in for a cells overflow.


layoutColumns

protected void layoutColumns(int targetSpan,
                             int[] offsets,
                             int[] spans,
                             SizeRequirements[] reqs)
Layout the columns to fit within the given target span.

Parameters:
targetSpan - the given span for total of all the table columns.
reqs - the requirements desired for each column. This is the column maximum of the cells minimum, preferred, and maximum requested span.
spans - the return value of how much to allocated to each column.
offsets - the return value of the offset from the origin for each column.
Returns:
the offset from the origin and the span for each column in the offsets and spans parameters

layoutMinorAxis

protected void layoutMinorAxis(int targetSpan,
                               int axis,
                               int[] offsets,
                               int[] spans)
Perform layout for the minor axis of the box (i.e. the axis orthoginal to the axis that it represents). The results of the layout should be placed in the given arrays which represent the allocations to the children along the minor axis. This is called by the superclass whenever the layout needs to be updated along the minor axis.

This is implemented to call the layoutColumns method, and then forward to the superclass to actually carry out the layout of the tables rows.

Overrides:
layoutMinorAxis in class BoxView
Parameters:
targetSpan - the total span given to the view, which whould 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.
Returns:
the offset and span for each child view in the offsets and spans parameters

calculateMinorAxisRequirements

protected SizeRequirements calculateMinorAxisRequirements(int axis,
                                                          SizeRequirements r)
Calculate the requirements for the minor axis. This is called by the superclass whenever the requirements need to be updated (i.e. a preferenceChanged was messaged through this view).

This is implemented to calculate the requirements as the sum of the requirements of the columns.

Overrides:
calculateMinorAxisRequirements in class BoxView
Parameters:
axis - the axis being studied
r - the SizeRequirements object; if null one will be created
Returns:
the newly initialized SizeRequirements object
See Also:
javax.swing.SizeRequirements

calculateColumnRequirements

void calculateColumnRequirements(int axis)
Calculate the requirements for each column. The calculation is done as two passes over the table. The table cells that occupy a single column are scanned first to determine the maximum of minimum, preferred, and maximum spans along the give axis. Table cells that span multiple columns are excluded from the first pass. A second pass is made to determine if the cells that span multiple columns are satisfied. If the column requirements are not satisified, the needs of the multi-column cell is mixed into the existing column requirements. The calculation of the multi-column distribution is based upon the proportions of the existing column requirements and taking into consideration any constraining maximums.


checkSingleColumnCell

void checkSingleColumnCell(int axis,
                           int col,
                           View v)
check the requirements of a table cell that spans a single column.


checkMultiColumnCell

void checkMultiColumnCell(int axis,
                          int col,
                          int ncols,
                          View v)
check the requirements of a table cell that spans multiple columns.


getViewAtPosition

protected View getViewAtPosition(int pos,
                                 Rectangle a)
Fetches the child view that represents the given position in the model. This is implemented to walk through the children looking for a range that contains the given position. In this view the children do not necessarily have a one to one mapping with the child elements.

Overrides:
getViewAtPosition in class CompositeView
Parameters:
pos - the search position >= 0
a - the allocation to the table on entry, and the allocation of the view containing the position on exit
Returns:
the view representing the given position, or null if there isn't one


comments?