2010-08-04 65 views
0

我期望做的是使用Java绘制不完整的多边形。我已经想出了如何一次绘制多边形,甚至填充多边形。我也可以通过使用线段绘制不完整的多边形,但问题在于BasicStroke.JOIN_BEVEL不适用于线段。下面是我如何使用线段:如何使用Java绘制不完整的多边形

//polygon is not Java's Polygon, my own implementation, and the methods do as 
//they imply 
for(int i = 0; i < polygon.getNumberOfPoints(); i++){ 
    Point2D.Double first = polygon.getPoint(i); 
    Point2D.Double second = new Point2D.Double(); 
    if(polygon.getPoint(i+1) != null){ 
     second = polygon.getPoint(i+1); 
     trans1 = /* some graphic translation of first */ 
     trans2 = /* some graphic translation of second */ 
     g.setColor(polygon.getColor()); 
     g.setStroke(new BasicStroke(polygon.getWeight(), BasicStroke.JOIN_BEVEL, BasicStroke.CAP_BUTT)); 
     g.draw(new Line2D.Double(trans1[0], trans1[1], trans2[0], trans2[1])); 
    } 
} 

这很好,但它不能正常工作,我想怎么样。 g.setStroke(/*stuff here*/);对关节没有影响。

回答

0

创建一个Path2D.Double,但只是不要调用closePath()。

 
Path2D.Double path = new Path2D.Double(); 
for (int i = 0; i < polygon.getNumberOfPoints(); i++) { 
    Point2D.Double point = polygon.getPoint(i); 
    trans1 = /* some graphic translation */; 
    if (i == 0) 
    path.moveTo(trans1[0], trans1[1]); 
    else 
    path.lineTo(trans1[0], trans2[0]); 
} 
g.setColor(polygon.getColor()); 
g.setStroke(new BasicStroke(polygon.getWeight(), BasicStroke.JOIN_BEVEL, BasicStroke.CAP_BUTT)); 
g.draw(path); 
+0

我试过使用Path2D.Double,但问题是多边形的最后一个末端将跟随我的鼠标从最后一个地方点击,甚至使用Path2D.Double它似乎反应的方式与绘图相同第一个和最后一个点不相等的多边形,Java会在它们之间绘制一条线。我会再试一次,看看我是否看过。 – heater 2010-08-04 18:15:33

3

那么我完全错过了一个方法。

g.drawPolyline(int[] xCoords, int[] yCoords, int numPoints) 

这解决了我的问题。