我正在使用MouseMotion侦听器将形状添加到HashSet,然后使用Graphics2D进行填充。但是,当我将鼠标移动得太快时,这些点将不再形成连贯的线。

我已经尝试使用Google搜索,但是没有找到相关的答案。

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);
        }


我希望得到一条由圆圈组成的优美而流畅的线条,但最终会出现圈定的圆圈。 https://imgur.com/a/KLOyPcn

最佳答案

鼠标以一定的频率工作(正常的鼠标在100Hz左右工作),因此在移动鼠标时会拾取一定数量的点。

如果您在半秒内覆盖了1000像素(这并不是很快),它将选择50个点,它们将每20像素间隔一次。

如果圆的半径小于该半径,则会看到一条虚线。

即使使用非常快的鼠标也无法使您连续显示。

您可以根据需要在点之间画一条直线,而不是画一个圆,或者在最后一个圆和当前一个圆之间插入坐标,并在两个圆之间创建其他圆。

10-05 21:16
查看更多