2013-10-21 76 views
0

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

我在这里看到各种问题,但大多数处理拿着鼠标按钮和拖动鼠标。

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

+1

你试过吗?你有没有示例代码来建议?我们真的太想念你了。你在画什么? “线条预览”背后是否还有其他内容? – jwatkins

+1

'..但大多数处理与按住鼠标按钮并拖动鼠标。 - - 为您的目的修改这些示例。代码将非常相似。 'mousePressed'会保存起点。而不是使用mouseDragged,你可以使用mouseMoved拖动预览行。然后在mouseReleased中,您将保存结束点。当然,你需要一些额外的逻辑来确保你已经有了起点。 – camickr

回答

0

您需要创建一个实现MouseEventListenerMouseMotionListener的应用程序。使用MouseEventListener方法mouseClicked来检查鼠标是否已被点击,并且随后用方法MouseMoved将线条的另一端更新为鼠标的位置。最后再次使用MouseEventListener来查明线路的最终位置。

我希望这会有所帮助。

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

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)的常规内容(之前paiting行。