Java 两点之间的动态线,单击,移动鼠标,然后单击

Java 两点之间的动态线,单击,移动鼠标,然后单击,java,mouselistener,Java,Mouselistener,我必须用Java划一条线。我单击一个点,然后释放鼠标键,移动鼠标(线的末端应该是鼠标光标所在的位置(动态预览)),然后再次单击鼠标键以生成线 我在这里看到了各种各样的问题,但大多数问题都是关于按住鼠标键并拖动鼠标 我的问题是,如何使用上述方法动态地画一条线。我担心重新粉刷。我之前有代码,它在我移动鼠标时画出了所有的线条。有没有一种方法可以预览一下 您需要创建一个同时实现MouseEventListener和MouseMotionListener的应用程序。使用MouseEventListener

我必须用Java划一条线。我单击一个点,然后释放鼠标键,移动鼠标(线的末端应该是鼠标光标所在的位置(动态预览)),然后再次单击鼠标键以生成线

我在这里看到了各种各样的问题,但大多数问题都是关于按住鼠标键并拖动鼠标


我的问题是,如何使用上述方法动态地画一条线。我担心重新粉刷。我之前有代码,它在我移动鼠标时画出了所有的线条。有没有一种方法可以预览一下

您需要创建一个同时实现
MouseEventListener
MouseMotionListener
的应用程序。使用
MouseEventListener
方法
mouseClicked
检查鼠标是否已单击,然后使用
MouseMotionListener
方法
MouseMoved
将行的另一端更新到鼠标的位置。最后,再次使用
MouseEventListener
来确定行的结束位置

我希望这有帮助

看看:

您的帖子中缺少了很多信息,因此很难提供准确的解决方案,但这里是总体思路。假设您需要一个透明的JComponent来接收鼠标事件并绘制行预览,那么代码将如下所示

public class MyLinePreviewComponent extends JComponent {
    Point sourcePoint;
    Point destinationPoint;

    pubic MyLinePreviewComponent() {
        this.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (sourcePoint == null)
                    sourcePoint = e.getPoint();
                else
                    sourcePoint = null;
                repaint();
            }
        });
        this.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                if (sourcePoint != null)
                    targetPoint = e.getPoint();
                repaint();
            }
        });
    }

    public void paintComponent(Graphics g) {
        if (sourcePoint != null && destinationPoint != null) {
            g.setColor(Color.red);
            g.drawLine(sourcePoint.x, sourcePoint.y, destinationPoint.x, destinationPoint.y);
        }
    }
}
请注意,我没有运行此代码


如果必须将线条预览功能添加到现有组件中,则在绘制线条之前,必须在paintComponent()中重新绘制常规内容。

是否尝试过?您是否有示例代码可供建议?我们真的错过太多了,无法帮助你。你在画什么?“线条预览”后面是否还有其他绘制内容?
。但大多数都是按住鼠标按钮并拖动鼠标。
-因此,请根据您的需要修改这些示例。代码将非常相似。按下
鼠标将保存起始点。您可以使用mouseMoved来拖动预览线,而不是使用mouseDragged。然后在MouseRelease中保存端点。当然,你需要一些额外的逻辑来确保你已经有了起点。