我必须在Java中画一条线。我点击一个点,然后释放鼠标键,移动鼠标(线的末端应该是鼠标光标所在的位置(动态预览))然后再次单击鼠标键来制作线。
我在这里看到了各种各样的问题,但大多数问题都是按住鼠标按钮并拖动鼠标。
我的问题是,如何使用上述方法动态绘制线条。我担心重画。我之前有代码,当我移动鼠标时,它绘制了所有行。有没有办法进行预览。
答案 0 :(得分:0)
您需要创建一个同时实现MouseEventListener
和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。
答案 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()中的常规内容。