2010-08-04 62 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) 

這解決了我的問題。