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

时间:2013-10-21 19:02:48

标签: java mouselistener

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

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

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

2 个答案:

答案 0 :(得分:0)

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

我希望这会有所帮助。

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

答案 1 :(得分: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()中的常规内容。