Class ComponentProvider<T extends javax.swing.JComponent>
- java.lang.Object
-
- org.jdesktop.swingx.renderer.ComponentProvider<T>
-
- All Implemented Interfaces:
- java.io.Serializable, UIDependent
- Direct Known Subclasses:
- CheckBoxProvider, HyperlinkProvider, LabelProvider, WrappingProvider
public abstract class ComponentProvider<T extends javax.swing.JComponent> extends java.lang.Object implements java.io.Serializable, UIDependent
Abstract base class of a provider for a cell rendering component. Configures the component's content and default visuals depending on the renderee's state as captured in aCellContext. It's basically re-usable across all types of renderees (JTable, JList, JTree).Content
A provider guarantees to configure the "content" properties completely for any given object. The most frequent mappings are to text and/or icon properties of the rendering components. The former is controlled by a StringValue (see below), the latter by an IconValue. Subclasses which hand out component of type IconAware guarantee to reset its icon property always.To ease content configuration, it supports a pluggable
StringValuewhich purpose is to create and return a string representation of a given object. Implemenations of a ComponentProvider can use it to configure their rendering component as appropriate.F.i. to show a Contributor cell object as "Busywoman, Herta" implement a custom StringValue and use it in a text rendering provider. (Note that SwingX default implementations of Table/List/TreeCellRenderer have convenience constructors to take the converter and create a default LabelProvider which uses it).
To ease handling of formatted localizable content, there's aStringValue stringValue = new StringValue() { public String getString(Object value) { if (!(value instanceof Contributor)) return TO_STRING.getString(value); Contributor contributor = (Contributor) value; return contributor.lastName + ", " + contributor.firstName; } }; table.setDefaultRenderer(Contributor.class, new DefaultTableRenderer( stringValue)); list.setCellRenderer(new DefaultListRenderer(stringValue)); tree.setCellRenderer(new DefaultTreeRenderer(stringValue));FormatStringValuewhich is pluggable with aFormat.F.i. to show a Date's time in the default Locale's SHORT version and right align the cell
StringValue stringValue = new FormatStringValue( DateFormat.getTimeInstance(DateFormat.SHORT)); table.getColumnExt("timeID").setCellRenderer( new DefaultTableRenderer(stringValue, JLabel.RIGHT);Default Visuals
Guarantees to completely configure the visual properties listed below. As a consequence, client code (f.i. inHighlighters) can safely change them without long-lasting visual artefacts.- foreground and background, depending on selected and focused state
- border
- font
- Painter (if applicable)
- enabled
- componentOrientation
- tooltipText
- minimum-, maximum-, preferredSize
- horizontal alignment (if applicable)
DefaultVisuals(which handles the first eight items) subclasses have to guarantee the alignment only.
-
-
Constructor Summary
Constructors Constructor and Description ComponentProvider()Instantiates a component provider with LEADING horizontal alignment and default to-String converter.ComponentProvider(StringValue converter)Instantiates a component provider with LEADING horizontal alignment and the given converter.ComponentProvider(StringValue converter, int alignment)Instantiates a LabelProvider with given to-String converter and given horizontal alignment.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description intgetHorizontalAlignment()Returns the horizontal alignment.TgetRendererComponent(CellContext context)Configures and returns an appropriate component to render a cell in the given context.java.lang.StringgetString(java.lang.Object value)Returns a string representation of the content.StringValuegetStringValue()Returns the StringValue to use for obtaining the String representation.voidsetHorizontalAlignment(int alignment)Sets the horizontal alignment property to configure the component with.voidsetStringValue(StringValue formatter)Sets the StringValue to use.voidupdateUI()Updates all internal visuals after changing a UI-delegate.
-
-
-
Constructor Detail
-
ComponentProvider
public ComponentProvider()
Instantiates a component provider with LEADING horizontal alignment and default to-String converter.
-
ComponentProvider
public ComponentProvider(StringValue converter)
Instantiates a component provider with LEADING horizontal alignment and the given converter.- Parameters:
converter- the converter to use for mapping the cell value to a String representation.
-
ComponentProvider
public ComponentProvider(StringValue converter, int alignment)
Instantiates a LabelProvider with given to-String converter and given horizontal alignment. If the converter is null, the default TO_STRING is used.- Parameters:
converter- the converter to use for mapping the cell value to a String representation.alignment- the horizontal alignment.
-
-
Method Detail
-
getRendererComponent
public T getRendererComponent(CellContext context)
Configures and returns an appropriate component to render a cell in the given context. If the context is null, returns the component in its current state.- Parameters:
context- the cell context to configure from- Returns:
- a component to render a cell in the given context.
-
setHorizontalAlignment
public void setHorizontalAlignment(int alignment)
Sets the horizontal alignment property to configure the component with. Allowed values are those accepted by corresponding JLabel setter. The default value is JLabel.LEADING. This controller guarantees to apply the alignment on each request for a configured rendering component, if possible. Note that not all components have a horizontal alignment property.- Parameters:
alignment- the horizontal alignment to use when configuring the rendering component.
-
getHorizontalAlignment
public int getHorizontalAlignment()
Returns the horizontal alignment.- Returns:
- the horizontal alignment of the rendering component.
- See Also:
setHorizontalAlignment(int)
-
setStringValue
public void setStringValue(StringValue formatter)
Sets the StringValue to use. If the given StringValue is null, defaults toStringValue.TO_STRING.- Parameters:
formatter- the format to use.
-
getStringValue
public StringValue getStringValue()
Returns the StringValue to use for obtaining the String representation.- Returns:
- the StringValue used by this provider, guaranteed to be not null.
-
getString
public java.lang.String getString(java.lang.Object value)
Returns a string representation of the content.This method guarantees to return the same string representation as would appear in the renderer, given that the corresponding cellContext has the same value as the parameter passed-in here. That is (assuming that the rendering component has a getText())
This implementation simply delegates to its StringValue. Subclasses might need to override to comply.if (equals(value, context.getValue()) { assertEquals(provider.getString(value), provider.getRenderingComponent(context).getText()); }This is a second attempt - the driving force is the need for a consistent string representation across all (new and old) themes: rendering, (pattern) filtering/highlighting, searching, auto-complete ...
- Parameters:
value- the object to represent as string.- Returns:
- a appropriate string representation of the cell's content.
-
updateUI
public void updateUI()
Updates all internal visuals after changing a UI-delegate.- Specified by:
updateUIin interfaceUIDependent- See Also:
JComponent.updateUI()
-
-
DataMelt 3.0 © DataMelt by jWork.ORG