Java Graphics2D:在上一个下绘制下图

Posted

技术标签:

【中文标题】Java Graphics2D:在上一个下绘制下图【英文标题】:Java Graphics2D : draw the following figure under the previous 【发布时间】:2014-10-25 14:43:30 【问题描述】:

如何在上一个画出下图?现在结束了......这将是漏斗,所以我希望每个下一个椭圆都在多边形和弧下。 我有这样的代码:

    for (int i = 0; i < pdLen; i++) 
        ....
        ....
        g2.fillPolygon(poly);

        g2.fillOval(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight);

        g2.fillArc(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180);
    

谢谢 PS:后面的坐标是从前面计算的,所以 for(int i=pdLen-1;i>0;i--) 不起作用

UPD:

每个循环步骤都会计算 topLeft 和 topRight。

        int[] topLeft = (int)Math.round( startX + ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
        int[] topRight = (int)Math.round( topRightX - ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
        procSum += (pieceData[i] * pieceProc);

        int[] botLeft = (int)Math.round( startX + ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
        int[] botRight = (int)Math.round( topRightX - ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
        procSum += padProc;

【问题讨论】:

【参考方案1】:

您可以反转循环。您可能需要考虑坐标的计算,但可以做到。

一般来说,在这种情况下,您应该发布MCVE。这将为每个人节省大量时间。

然而,廉价(即简单)的解决方案是存储必须绘制的内容,然后以相反的顺序绘制这些形状:

List<Shape> ovals = new ArrayList<Shape>();
List<Shape> arcs = new ArrayList<Shape>();
for (int i = 0; i < pdLen; i++) 
    //g2.fillOval(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight);
    ovals.add(new Ellipse2D.Double(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight));
    //g2.fillArc(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180);
    arcs.add(new Arc2D.Double(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180));

for (int i=ovals.size()-1; i>=0; i--)

    g2.fill(ovals.get(i));
    g2.fill(arcs.get(i));

【讨论】:

以上是关于Java Graphics2D:在上一个下绘制下图的主要内容,如果未能解决你的问题,请参考以下文章

java Graphics2D绘制文字并居中并解决服务器乱码问题

用于绘制图像的 Java Graphics2D 方法,其中使用了像素 alpha 值但颜色值被替换为给定的颜色

Java中的Graphics2D类基本使用教程

在图像上绘制 Graphics2D 形状

如何用 Java2D 绘制内部笔画

java GUI Graphics2D 绘图