2011-08-09 26 views
3

我想用Java編寫一個簡單的畫圖小程序,但我遇到了BasicStroke問題。最初,我的計劃是試圖以某種方式繪製寬度的線條,但API顯然不支持這一點。Java BasicStroke「模糊」

我嘗試使用BasicStroke,但結果只是一團糟。我該如何解決這個模糊問題?

typical result

private void mousedrag_hook(Point point) 
    { 
     if(start == null) 
      start = point; 

      end = point; 

      Graphics2D g2d = (Graphics2D)applInstance.buffer_g; 
      g2d.setStroke(new BasicStroke(7)); 

      //g2d.fillOval(point.x - 5, point.y - 5, 10, 10); 
      g2d.drawLine(start.x, start.y, end.x, end.y); 
      applInstance.repaint(); 

      start = end; 
    } 
+2

這看起來模糊,我在所有。事實上,恰恰相反:當一些抗鋸齒將使其看起來筆直且柔軟時,看起來鋸齒狀和尖銳。 –

回答

5

不要忘了RenderingHints

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(
     RenderingHints.KEY_ANTIALIASING, 
     RenderingHints.VALUE_ANTIALIAS_ON); 
    ... 
} 
+0

另請參閱此相關的[示例](http://stackoverflow.com/questions/5797862/draw-a-line-in-a-jpanel-with-button-click-in-java/5797965#5797965)。 – trashgod

+0

謝謝!隨着反鋸齒和圓形屁股,現在看起來好多了。但是,我注意到在MS Paint中,在完成筆畫之後,大部分「邊緣」都被刪除,線條看起來更平滑。 有沒有一個簡單的算法可以做到這一點? – user830713

+0

是的,在'GeneralPath'中積累基本點,如[這裏]所示(http://stackoverflow.com/questions/6694417/draw-polar-graph-in-java/6697773#6697773)。您可以通過單擊左側的檢查來接受此答案,如[常見問題#信譽]中所述。 – trashgod