使用java图形API绘制图层

时间:2011-05-25 08:28:25

标签: java swing graphics layer graphics2d

我正在做一个模拟器项目,测试几个基于A *的算法,并展示它们的工作原理和结果。 算法都是多代理的,并在网格图环境中运行。

我在网格中使用了一个JPanel,它包含一个二维Cell单元,其中每个Cell都是一个自定义类,它扩展了Component类,并使用paint方法在每个单元格中绘制我需要的东西。 对于单元格内的绘图,我使用Graphics.fillRect或Graphics.drawImage等方法用特定颜色或图标填充每个单元格。

我正在使用一个特殊的Icon作为网格上每个代理的起始位置和目标位置。 我的问题是我希望能够在同一个单元格上绘制多个项目。

例如,我希望能够通过以特殊颜色在路径上绘制单元格来显示其中一个代理的路径,并且路径可能会通过另一个代理的起始位置,因此我希望能够使用颜色填充单元格并在顶部绘制图标。 在另一个例子中,我希望能够使用alpha混合来混合两种颜色。

如果我使用带有alpha的一种颜色的graphics.fillRect()然后再使用带有alpha值的不同颜色,它将无法工作,因为最后一次fillRect()将覆盖第一次调用。

有没有办法可以使用我创建的相同Cell Component实现我需要的东西,还是应该以不同的方式实现它? 也许这个问题有更好的解决方案? 我真的很感激有关这个问题的任何建议。

1 个答案:

答案 0 :(得分:2)

  

如果您绘制一个50%alpha的矩形然后绘制另一个矩形,第二个将覆盖它而不是与它混合。

这取决于模式。这个方便的utility显示了使用AlphaComposite中定义的模式混合不同颜色的结果。可用的source code可能会为您的项目提供一些见解。

附录:

  我尝试合成的东西是在同一个Component

example cited就是这样做的,example就是这样做的。如果AlphaComposite不符合您的要求,您可以随时改变色调,饱和度和/或值;这个example根据饱和度组成一个颜色表。