|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jdesktop.swingx.decorator.ComponentAdapter
public abstract class ComponentAdapter
Abstract base class for all component data adapter classes. A
ComponentAdapter
allows a Filter
, Sorter
, or
Highlighter
to interact with a target
component through a
common API.
It has two aspects:
HighlightPredicate feverWarning = new HighlightPredicate() {
int temperatureColumn = 10;
public boolean isHighlighted(Component component, ComponentAdapter adapter) {
return hasFever(adapter.getValue(temperatureColumn));
}
private boolean hasFever(Object value) {
if (!value instanceof Number)
return false;
return ((Number) value).intValue() > 37;
}
};
Highlighter hl = new ColorHighlighter(feverWarning, Color.RED, null);
The adapter is responsible for mapping column coordinates.
All input column indices are in model coordinates with exactly two
exceptions:
column
in column view coordinates
viewToModel(int)
in view coordinates
row
in row view coordinates
getFilteredValueAt(int, int)
takes the row in view coordinates.
getFilteredStringAt(int, int)
takes the row in view coordinates.
PENDING JW: anything to gain by generics here?
PENDING JW: formally document that row/column coordinates must be valid in all methods taking model coordinates, that is 0<= row < getRowCount().
HighlightPredicate
,
Highlighter
,
Filter
Field Summary | |
---|---|
int |
column
current column in view coordinates. |
static Object |
DEFAULT_COLUMN_IDENTIFIER
|
int |
row
current row in view coordinates. |
protected JComponent |
target
|
Constructor Summary | |
---|---|
ComponentAdapter(JComponent component)
Constructs a ComponentAdapter, setting the specified component as the target component. |
Method Summary | |
---|---|
int |
getColumnCount()
Returns the number of columns in the target's data model. |
Object |
getColumnIdentifierAt(int columnIndex)
Returns logical identifier of the column at columnIndex in model coordinates. |
int |
getColumnIndex(Object identifier)
Returns the column index in model coordinates for the logical identifier. |
String |
getColumnName(int columnIndex)
Returns the column's display name (= headerValue) of the column at columnIndex in model coordinates. |
JComponent |
getComponent()
Returns the component which is this adapter's target. |
int |
getDepth()
Returns the depth of this row in the hierarchy where the root is 0. |
String |
getFilteredStringAt(int row,
int column)
Returns the String representation of the filtered value of the cell identified by the row in view coordinate and the column in model coordinates. |
abstract Object |
getFilteredValueAt(int row,
int column)
Returns the filtered value of the cell identified by the row in view coordinate and the column in model coordinates. |
int |
getRowCount()
Returns the number of rows in the target's data model. |
String |
getString()
Returns the String representation of the value of the cell identified by this adapter. |
String |
getString(int modelColumnIndex)
Returns the String representation of the value of the cell identified by the current adapter row and the given column index in model coordinates. |
String |
getStringAt(int row,
int column)
Returns the String representation of the value of the cell identified by the row specified row and column in model coordinates. |
Object |
getValue()
Returns the value of the cell identified by this adapter. |
Object |
getValue(int modelColumnIndex)
Returns the value of the cell identified by the current adapter row and the given column index in model coordinates. |
abstract Object |
getValueAt(int row,
int column)
Returns the value of the target component's cell identified by the specified row and column in model coordinates. |
abstract boolean |
hasFocus()
Returns true if the cell identified by this adapter currently has focus. |
abstract boolean |
isCellEditable(int row,
int column)
Determines whether this cell is editable. |
abstract boolean |
isEditable()
Returns true if the cell identified by this adapter is editable,
false otherwise. |
boolean |
isExpanded()
Returns true if the cell identified by this adapter is currently expanded. |
boolean |
isHierarchical()
Returns true if the cell identified by this adapter displays the hierarchical node. |
boolean |
isLeaf()
Returns true if the cell identified by this adapter is a leaf node. |
abstract boolean |
isSelected()
Returns true if the cell identified by this adapter is currently selected. |
boolean |
isTestable(int column)
Returns true if the column should be included in testing. |
int |
modelToView(int columnIndex)
For target components that support multiple columns in their model, along with column reordering in the view, this method transforms the specified columnIndex from model coordinates to view coordinates. |
void |
refresh()
Updates the target component on screen. |
abstract void |
setValueAt(Object aValue,
int row,
int column)
Sets the value of the target component's cell identified by the specified row and column in model coordinates. |
int |
viewToModel(int columnIndex)
For target components that support multiple columns in their model, along with column reordering in the view, this method transforms the specified columnIndex from view coordinates to model coordinates. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final Object DEFAULT_COLUMN_IDENTIFIER
public int row
public int column
protected final JComponent target
Constructor Detail |
---|
public ComponentAdapter(JComponent component)
component
- target component for this adapterMethod Detail |
---|
public JComponent getComponent()
public String getColumnName(int columnIndex)
Note: it's up to the implementation to decide for which columns it returns a name - most will do so for the subset with isTestable = true. This implementation delegates to getColumnIdentifierAt and returns it's toString or null.
columnIndex
- in model coordinates
public Object getColumnIdentifierAt(int columnIndex)
This implementation returns DEFAULT_COLUMN_IDENTIFIER. PENDING JW: This method replaces the old getColumnIdentifier(int) which returned a String which is overly restrictive. The only way to gently replace this method was to add this with a different name - which makes this name suboptimal. Probably should rename again once the old has died out ;-)
columnIndex
- in model coordinates, must be valid.
ArrayIndexOutOfBoundsException
- if columnIndex < 0 or columnIndex >= getColumnCount().getColumnIndex(Object)
public int getColumnIndex(Object identifier)
This implementation returns 0 if the identifier is the same as the one known identifier returned from getColumnIdentifierAt(0), or -1 otherwise. So subclasses with one column and a customizable identifier need not override. Subclasses which support multiple columns must override this as well to keep the contract as in (assuming that the lookup succeeded):
Object id = getColumnIdentifierAt(index);
assertEquals(index, getColumnIndex(index);
// and the reverse
int column = getColumnIndex(identifier);
assertEquals(identifier, getColumnIdentifierAt(column));
identifier
- the column's identifier, must not be null
NullPointerException
- if identifier is null.getColumnIdentifierAt(int)
public int getColumnCount()
public int getRowCount()
public abstract Object getValueAt(int row, int column)
row
- in model coordinatescolumn
- in model coordinates
public abstract void setValueAt(Object aValue, int row, int column)
aValue
- the value to setrow
- in model coordinatescolumn
- in model coordinatespublic abstract boolean isCellEditable(int row, int column)
row
- the row to query in model coordinatescolumn
- the column to query in model coordinates
true
if the cell is editable, false
otherwisepublic boolean isTestable(int column)
Here: returns true if visible (that is modelToView gives a valid view column coordinate).
column
- the column index in model coordinates
public String getString()
NOTE: this implementation assumes that view coordinates == model coordinates, that is simply calls getValueAt(this.row, this.column). It is up to subclasses to override appropriately is they support model/view coordinate transformation.
This implementation messages the StringValue.TO_STRING with the getValue, subclasses should re-implement and use the api appropriate for the target component type.
getValueAt(int, int)
,
getFilteredValueAt(int, int)
,
getValue(int)
public String getString(int modelColumnIndex)
modelColumnIndex
- the column index in model coordinates
getFilteredStringAt(int, int)
,
getString()
public String getFilteredStringAt(int row, int column)
Note: the asymetry of the coordinates is intentional - clients like Highlighters are interested in view values but might need to access non-visible columns for testing. While it is possible to access row coordinates different from the current (that is this.row) it is not safe to do so for row > this.row because the adapter doesn't allow to query the count of visible rows.
This implementation messages the StringValue.TO_STRING with the filteredValue, subclasses should re-implement and use the api appropriate for the target component type.
PENDING JW: what about null cell values? StringValue has a contract to return a empty string then, would that be okay here as well?
row
- the row of the cell in view coordinatescolumn
- the column of the cell in model coordinates.
public String getStringAt(int row, int column)
This implementation messages the StringValue.TO_STRING with the valueAt, subclasses should re-implement and use the api appropriate for the target component type.
row
- in model coordinatescolumn
- in model coordinates
public Object getValue()
NOTE: this implementation assumes that view coordinates == model coordinates, that is simply calls getValueAt(this.row, this.column). It is up to subclasses to override appropriately is they support model/view coordinate transformation.
getValueAt(int, int)
,
getFilteredValueAt(int, int)
,
getValue(int)
public Object getValue(int modelColumnIndex)
modelColumnIndex
- the column index in model coordinates
getValueAt(int, int)
,
getFilteredValueAt(int, int)
,
getValue(int)
public abstract Object getFilteredValueAt(int row, int column)
row
- the row of the cell in view coordinatescolumn
- the column of the cell in model coordinates.
public abstract boolean hasFocus()
public abstract boolean isSelected()
public abstract boolean isEditable()
true
if the cell identified by this adapter is editable,
false
otherwise.
true
if the cell is editable, false
otherwisepublic boolean isExpanded()
public boolean isLeaf()
public boolean isHierarchical()
public int getDepth()
public int modelToView(int columnIndex)
columnIndex
- index of a column in model coordinates
public int viewToModel(int columnIndex)
columnIndex
- index of a column in view coordinates
public void refresh()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |