java图形-具有两种颜色的形状
(这是java)我有一个椭圆形,代表一个单位。我希望椭圆形的颜色代表装置的健康状况。因此,一个完全健康的单元将全部为绿色。随着装置的健康度降低,椭圆形开始从底部填充红色。因此,在50%的生命值下,椭圆形的下半部分是红色的,上半部分是绿色的,当单位死亡时,椭圆形完全是红色的。 我确信这里的解决方案一定是显而易见的,琐碎的,但我就是看不到。java图形-具有两种颜色的形状,java,graphics,Java,Graphics,(这是java)我有一个椭圆形,代表一个单位。我希望椭圆形的颜色代表装置的健康状况。因此,一个完全健康的单元将全部为绿色。随着装置的健康度降低,椭圆形开始从底部填充红色。因此,在50%的生命值下,椭圆形的下半部分是红色的,上半部分是绿色的,当单位死亡时,椭圆形完全是红色的。 我确信这里的解决方案一定是显而易见的,琐碎的,但我就是看不到。 非常感谢您可以在背景中绘制一个红色椭圆形,然后绘制一个椭圆形和矩形的绿色交点,矩形从椭圆形下方开始,然后进一步移动到顶部,以显示下方更多的红色椭圆形 您可能想了
非常感谢您可以在背景中绘制一个红色椭圆形,然后绘制一个椭圆形和矩形的绿色交点,矩形从椭圆形下方开始,然后进一步移动到顶部,以显示下方更多的红色椭圆形
您可能想了解如何使用基本体构建复杂形状您可以在背景中绘制一个红色椭圆形,然后绘制椭圆形和矩形的绿色交点,其中矩形从椭圆形下方开始,然后进一步移动到顶部,以显示下方的更多红色椭圆形
您可能想了解如何使用基本体构建复杂形状绘制绿色时,可以在图形上设置剪辑。只有剪辑中的东西才会被画出来
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);
}
绘制绿色时,可以在图形上设置剪辑。只有剪辑中的东西才会被画出来
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);
}
重写绘制方法,如下所示:
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);
}
}
可能希望通过一些双缓冲来增强它,但您得到了要点。覆盖绘制方法,如下所示:
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);
}
}
可能想用一些双缓冲来增强它,但你明白了要点