這將是很長,所以在此先感謝閱讀和/或回答:)在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通過使用滑塊來定義,並僅用於此「工具」。
您可以維護關於「點」的信息,並且簡單地迭代它們之間的對象的繪圖,您現在需要決定迭代級別 – MadProgrammer