我必须在 Java 中画一条线。我单击一个点,然后松开鼠标键,移动鼠标(行尾应该是鼠标光标所在的位置(动态预览))然后再次单击鼠标键以制作该行。
我在这里看到了各种各样的问题,但大多数都涉及按住鼠标按钮并拖动鼠标。
我的问题是,如何使用上述方法动态绘制一条线。我担心重新粉刷。我之前有代码,它在我移动鼠标时画出了所有的线条。有没有办法只是预览。
我必须在 Java 中画一条线。我单击一个点,然后松开鼠标键,移动鼠标(行尾应该是鼠标光标所在的位置(动态预览))然后再次单击鼠标键以制作该行。
我在这里看到了各种各样的问题,但大多数都涉及按住鼠标按钮并拖动鼠标。
我的问题是,如何使用上述方法动态绘制一条线。我担心重新粉刷。我之前有代码,它在我移动鼠标时画出了所有的线条。有没有办法只是预览。
您需要创建一个同时实现 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。
您的帖子中缺少很多信息,因此很难提供确切的解决方案,但这是总体思路。假设您需要一个透明的 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() 中的常规内容。