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);
>    }
>}
>
>
>
>

Reply via email to