2014-01-20 154 views
1

这是2个问题的种类:
1)的paint成员是否使用代号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

查核在代号一位Poker demo,你可以在看最新一批的演示,它采取了一种非常不同的方法,虽然压倒一切的油漆应该工作得很好。

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

我建议避免径向渐变,因为它们在某些平台上真的很慢。有关性能,请参阅this

+0

谢谢。是的,我已经看过扑克演示了,但我不认为我可以通过移动组件来实现我想要的工作 - 虽然很酷的想法:) 如果我想显示一个围绕另一个围绕另一个环绕的物体,你认为我可以我使用“扑克技术”来做到这一点? – noelicus

+0

此外,覆盖'calcPreferredSize()'似乎没有做任何事情,但'边界布局的中心'工程治疗:) – noelicus

+0

我很难从描述中知道,但你可以创建自己的布局管理器,并使用以任何你喜欢的方式定位组件。布局管理器实际上很容易创建,在开发人员指南中有这样一个例子。 –