java - 如何在拖动鼠标时平滑地填充椭圆

标签 java swing awt paint

我使用 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/

相关文章:

java - JLabel:异步加载 HTML 图像

java - 使用泛型返回参数类的实例

java - java中每分钟运行数百个http请求

java - 更新 JOptionPane 以反射(reflect)组件状态更改

java - BufferStrategy 和 Swing 结合起来?

java - 在多显示器系统中识别正在运行的显示器小程序

java - 你能用 Graphics g 绘制 Area 对象吗?

Java大写、小写问题

java - 什么是groovy等同于java datetime代码

java - JToolbar 中的 JTextField - 无法在 Linux 和 Windows 中正确显示