2009-07-24 86 views
0

(这是java)我有一个椭圆形,代表一个单位。我想要椭圆形的颜色代表单位的健康。所以一个完美健康的单位将全部是绿色的。随着装置的健康度下降,椭圆形开始从底部填充红色。所以,在50%的健康状况下,椭圆形的下半部分会变成红色,上半部分变成绿色,当单位死亡时变成全红。 我确信这里的解决方案必须是明显的和微不足道的,但我不能看到它。 非常感谢java图形 - 两种颜色的形状

回答

2

您可以在背景中绘制一个红色的椭圆形,然后绘制一个椭圆形和矩形的绿色交叉点,其中矩形在椭圆形下开始,然后进一步移动到顶部以显示更多的红色椭圆形。

你可能想在读了如何构建复杂形状出来元here

+0

太棒了!只是像我这样的新手需要:)非常感谢 – user143602 2009-07-24 15:34:00

0

您可以设置图形剪辑当你画绿色的。只有剪辑中的内容才会被绘制。

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D)g.create(); 

    g2d.setColor(Color.RED); 
    g2d.fillOval(10, 10, 200, 100); 

    g2d.setColor(Color.GREEN); 
    g2d.setClip(10, 10, 200, 50); 
    g2d.fillOval(10, 10, 200, 100); 

} 
1

覆盖paint方法是这样的:

public void paint(Graphics graphics) 
{  
    super.paint(graphics); 

    Rectangle originalClipBounds = graphics.getClipBounds(); 

    try 
    { 
    graphics.clipRect(100, 100, 100, 25); 
    graphics.setColor(Color.RED); 
    graphics.fillOval(100, 100, 100, 100); 
    } 
    finally 
    { 
    graphics.setClip(originalClipBounds); 
    } 

    try 
    { 
    graphics.clipRect(100, 125, 100, 75); 
    graphics.setColor(Color.BLUE); 
    graphics.fillOval(100, 100, 100, 100); 
    } 
    finally 
    { 
    graphics.setClip(originalClipBounds); 
    } 
} 

可能要使用一些双缓冲来增强它,但你得到的要点。