You need to be sure to override setSize() as follows:
Since FlowPane is a container, it needs to be validated, and since renderers
don't have a parent, you need to be sure to do this yourself (this code is from
ListViewItemRenderer, which also extends FlowPane):
@Override
public void setSize(int width, int height) {
super.setSize(width, height);
// Since this component doesn't have a parent, it won't be validated
// via layout; ensure that it is valid here
validate();
}
On Friday, July 03, 2009, at 10:54PM, "Edgar Merino" <[email protected]> wrote:
>Hello,
>
> I've tried to create a custom CellRenderer by extending a FlowPane
>(test code below), however none of the components inside the container
>are painted, I've tried to look at the code but I don't see why it
>wouldn't paint (in the end, it ends up calling CellRenderer#paint(),
>which turns out to be FlowPane#paint()). Maybe I missed something? I
>tried with other components like ImageView and it rendered without
>problem, any hint?
>
>
>Edgar Merino
>
>
>NOTE: tableData is not actually important in this test code, only length is
>CustomCellRenderer.java
>
>import java.awt.Color;
>import java.awt.Font;
>import java.awt.Graphics2D;
>import org.apache.pivot.wtk.Component;
>import org.apache.pivot.wtk.FlowPane;
>import org.apache.pivot.wtk.HorizontalAlignment;
>import org.apache.pivot.wtk.Insets;
>import org.apache.pivot.wtk.Label;
>import org.apache.pivot.wtk.Orientation;
>import org.apache.pivot.wtk.TableView;
>import org.apache.pivot.wtk.TableView.Column;
>import org.apache.pivot.wtk.VerticalAlignment;
>
>/**
> *
> * @author emerino
> */
>public class CustomCellRenderer extends FlowPane
> implements TableView.CellRenderer {
>
> private final Font primaryFont;
> private final Font secondaryFont;
> private Label label1;
> private Label label2;
>
> public CustomCellRenderer() {
> getStyles().put("verticalAlignment", VerticalAlignment.JUSTIFY);
> getStyles().put("horizontalAlignment", HorizontalAlignment.JUSTIFY);
> getStyles().put("padding", new Insets(3));
> setOrientation(Orientation.VERTICAL);
>
> this.primaryFont = Font.decode("Sans bold 16");
> this.secondaryFont = Font.decode("Sans 12");
>
> label1 = new Label("MESSAGE one");
> label1.getStyles().put("font", primaryFont);
> add(label1);
>
> label2 = new Label("below, secondary");
> label2.setText("adiós");
> label2.getStyles().put("font", secondaryFont);
> add(label2);
> }
>
> public void render(Object value, TableView tableView, Column column,
> boolean rowSelected, boolean rowHighlighted, boolean
>rowDisabled) {
>
> renderStyles(label1, tableView, rowSelected, rowDisabled);
> renderStyles(label2, tableView, rowSelected, rowDisabled);
> }
>
> protected void renderStyles(Label label, TableView tableView,
>boolean rowSelected, boolean rowDisabled) {
> Component.StyleDictionary tableViewStyles = tableView.getStyles();
> Component.StyleDictionary styles = label.getStyles();
>
> Color color;
> if (tableView.isEnabled() && !rowDisabled) {
> if (rowSelected) {
> if (tableView.isFocused()) {
> color = (Color)tableViewStyles.get("selectionColor");
> } else {
> color =
>(Color)tableViewStyles.get("inactiveSelectionColor");
> }
> } else {
> color = (Color)tableViewStyles.get("color");
> }
> } else {
> color = (Color)tableViewStyles.get("disabledColor");
> }
>
> styles.put("color", color);
> }
>}
>
>
>
>