我使用 MouseMotion Listeners 将形状添加到 HashSet,然后使用 Graphics2D 填充它们。然而,当我移动鼠标太快时,这些点就不再形成一条连贯的线。
我尝试过谷歌搜索,但没有找到相关答案。
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
//points.add(new Point(e.getX(), e.getY()));
shapes.add(new ShapeInfo(circle, new Point(e.getX(), e.getY()), color));
repaint();
}
});
for(ShapeInfo info : shapes) {
Point location = info.point.getLocation();
g2d.translate(location.x, location.y);
g2d.setColor(info.color);
g2d.fill(info.shape);
g2d.translate(-location.x, -location.y);
}
我希望得到一条由圆圈组成的漂亮、平滑的线条,但最终却得到了散乱的圆圈。 /image/ZfBl2.jpg <- 这是当我在绘画时拖动鼠标太快时发生的情况。
最佳答案
您的鼠标以一定的频率工作(普通鼠标的工作频率约为 100Hz),因此当您移动它时,它会选择一定数量的点。
如果您在半秒内覆盖 1000 像素(这并不是很快),它将选择 50 个点,它们将每隔 20 像素间隔一次。
如果您的圆的半径小于该半径,您将看到一条虚线。
即使使用非常快的鼠标也不能让你有一条连续的线。
如果需要,您可以在点之间画一条线而不是画圆,或者在最后一个圆和当前圆之间插入坐标并在两个圆之间创建其他圆。
关于java - 如何在拖动鼠标时平滑地填充椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56079687/