0

我必须在 Java 中画一条线。我单击一个点,然后松开鼠标键,移动鼠标(行尾应该是鼠标光标所在的位置(动态预览))然后再次单击鼠标键以制作该行。

我在这里看到了各种各样的问题,但大多数都涉及按住鼠标按钮并拖动鼠标。

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

4

2 回答 2

0

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

我希望这有帮助。

看看: http ://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html和http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

于 2013-10-21T19:18:50.140 回答
0

您的帖子中缺少很多信息,因此很难提供确切的解决方案,但这是总体思路。假设您需要一个透明的 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() 中的常规内容。

于 2013-10-21T19:20:25.450 回答