pivot-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Edgar Merino <donvo...@gmail.com>
Subject Custom TableView.CellRenderer
Date Sat, 04 Jul 2009 02:54:34 GMT

    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

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

        this.primaryFont = Font.decode("Sans bold 16");
        this.secondaryFont = Font.decode("Sans 12");       

        label1 = new Label("MESSAGE one");
        label1.getStyles().put("font", primaryFont);

        label2 = new Label("below, secondary");
        label2.getStyles().put("font", secondaryFont);

    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 = 
            } else {
                color = (Color)tableViewStyles.get("color");
        } else {
            color = (Color)tableViewStyles.get("disabledColor");

        styles.put("color", color);

View raw message