2016-04-28 23 views
1

這將是很長,所以在此先感謝閱讀和/或回答:)在Java中的2D繪圖與快速mousemovement

編輯:這How to draw a continuous curve of repeated ovals on speedy mouse cursor dragging?有一個答案,我不完全罰款,難道就沒有別的這樣做的方法比在矩形或橢圓之間繪製直線? (如果是矩形或橢圓形,對我無關緊要)。

我搜索了很多並沒有找到我正在尋找的東西,所以我們去: 我必須爲大學創建一個繪圖應用程序,而且我幾乎完成了,但我的一個問題是mouseDragged事件似乎沒有足夠快地識別運動(?)。這意味着,如果用戶用筆刷徒手繪製並且移動鼠標的速度太快,程序將不會繪製「連續的矩形線」。相反,繪圖中會有很多空白。這就是我的油漆()重寫和的MouseMotionListener(用於currentTool 1這是應該等同於刷/筆)看起來像:

public void paint(Graphics g){ 

    g2d = (Graphics2D)g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setComposite(AlphaComposite.getInstance(
      AlphaComposite.SRC_OVER, 1.0f)); 
    Iterator<Color> sc = strokeColours.iterator(); 
    Iterator<Color> fc = fillColours.iterator(); 
    Iterator<Boolean> fill = fillq.iterator(); 

    for (Shape s : shapes){ 
     g2d.setStroke(new BasicStroke(4)); 
     g2d.setPaint(sc.next()); 
     g2d.draw(s); 
     g2d.setPaint(fc.next()); 
     if (fill.next()){ 
      g2d.fill(s);  
     } 
    } 
    if (temp!=null){ 
     g2d.setComposite(AlphaComposite.getInstance(
       AlphaComposite.SRC_OVER, 0.5f)); 
     g2d.setPaint(strokeColour); 
     g2d.draw(temp); 
     if(isfilled){ 
      g2d.setPaint(fillColour); 
      g2d.fill(temp); 
     } 
    } 
} 

的motionlistener:

this.addMouseMotionListener(new MouseMotionAdapter(){ 
     public void mouseDragged(MouseEvent e){ 
      mx2=e.getX(); 
      my2=e.getY(); 
      if (currentTool==1){   
       Shape point= new Rectangle2D.Double(mx2-(0.5*penStroke),my2-(0.5*penStroke),0.5+penStroke,0.5+penStroke); 
       shapes.add(point); 
       addColours(strokeColour); 
      } 

      else if(...){... 
      } 


      repaint();    
     } 
    }); 
} 

注意:在addColours(顏色c)手動定義函數以將strokeColour添加到strokeColours和fillColours,並向fillq添加「true」。 penStroke通過使用滑塊來定義,並僅用於此「工具」。

+0

您可以維護關於「點」的信息,並且簡單地迭代它們之間的對象的繪圖,您現在需要決定迭代級別 – MadProgrammer

回答

1

看看Shape,一些孩子班會做貝塞爾曲線等等。嘗試CubicCurve2D.Float,QuadCurve2D.Double等,查找最後檢測到的鼠標點。請注意,並非曲線上的所有「控制」點都位於曲線本身,但沒有(很多)數學就可以得到好的結果。