使用JPanel绘制直线并获得点坐标

我现在完全失去了。 我在使用Java构建GUI方面没有太多工作,我一直在阅读关于swing和JPanel的所有内容,我认为我想做的事情是可能的,我只是没有弄清楚如何

我正在尝试构建一个GUI,您可以在某个绘图区域内绘制直线,我希望能够获得起点/终点坐标,以便使用这些点进行一些数学运算。 任何帮助将不胜感激!

我将把代码留给你,所以这里是算法:
1.创建一个JFrame并向其添加JPanel
2.为JPanel添加鼠标侦听器
3.每次按下鼠标,获取点击的x和y。 (起点)
4.拖动鼠标时,连续记录x和y。
5.释放鼠标时,记录x和y。 (结束点)
6.你可以使用Graphics类的drawLine()方法或使用Graphics draw() ,在这种情况下你需要一个Line2D.Double – 参数保持不变 – 开始x,开始y,结束x和结束y


这是一个更好地解释的图像: 在此处输入图像描述

从执行自定义绘画和2D图形开始 。

基本上,您需要一个鼠标监听器来监视用户与面板的交互,请查看如何编写鼠标监听器以获取更多信息。

根据您的需要,如果您需要维护用户的所有点击点,您需要将它们存储在List ,或者如果您只需要知道起点和终点,那么您只需要几个Point对象。

您可以使用它们在表面上绘画并执行所需的计算。

请记住,在这种情况下,这些点与它们生成的容器具有上下文关系。 那就是0x0将是容器的左上角

更新

您还可以利用Shape API,使用Line2D来表示两个点。 这样可以更容易区分不同的线/点

这比仅仅用“(x1,y1)和(x2,y2)”方法绘制直线更难。

您需要一个动态创建的Line (您的自定义)对象,并放置在正在侦听MouseEventJPanel上。canvas区域是JPanel本身。 您还需要将MODEL与VIEW分开,以便您的自定义canvasJPanel将使用paintComponent()的覆盖正确绘制自己

问题有点模糊,所以我无法提供任何代码。

你需要在JPanel上添加鼠标监听器。

然后:

 public void mouseClicked(MouseEvent me){ if(click==1){ int x1=me.getX(); int y1=me.getY(); click=click+1; } else{ int x2=me.getX(); int y2=me.getY(); click=1; } } drawLine(x1,y1,x2,y2) 

要使用鼠标移动绘制线条,您还可以添加鼠标移动侦听器。