绘制自定义组件

时间:2014-01-20 16:46:00

标签: codenameone

这是两个问题:
1)覆盖paint成员的Component成员是使用代号为1的简单2D图形游戏的最佳方法吗?或者我甚至不应该尝试它? 2)为什么下面的代码只绘制我的Component以便立即删除它?

我像这样初始化我的组件:

protected void StartGame()
{
    final Component newC = new PaintedComponent();

    Container mv = findContainerMainVisual();

    mv.addComponent(newC);
    mv.setShouldCalcPreferredSize(true);
    mv.animateLayout(200);
}

然后该组件会覆盖paint成员函数,如下所示:

public class PaintedComponent extends Component {
    private int nextColour;

    public PaintedComponent() {
        super();
        setSize(new Dimension(200,200));
        nextColour = 0x8f8f8f;
    }


    @Override
    public void paint(Graphics g) {
        super.paint(g); // I've tried without this, but it's the same
        g.setColor(0xffffff);
        g.fillRadialGradient(0xffffff, nextColour, 0,0,this.getWidth(), this.getHeight());
    }
}

1 个答案:

答案 0 :(得分:1)

查看Codename One中的Poker demo,您可以在最新一批演示中看到它,它采用了一种非常不同的方法,尽管覆盖油漆应该也可以正常工作。

组件未显示的原因是,当animateLayout()方法验证屏幕时,其大小为0。您应该将其放置在边框布局的中心(占用所有可用空间并禁用滚动)或覆盖calcPreferredSize()以返回合理的大小。

我建议避免使用径向渐变,因为它们在某些平台上非常慢。有关效果,请参阅this