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

时间:2013-02-17 06:55:12

标签: java swing user-interface jpanel

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

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

4 个答案:

答案 0 :(得分:11)

我会把代码留给你,所以这里是算法:
1.创建JFrame并为其添加JPanel 2.为JPanel添加鼠标监听器 3.每次按下鼠标,获取点击的x和y。 (起点)
4.拖动鼠标时,连续记录x和y 5.释放鼠标时,记录x和y。 (终点)
6.您可以使用drawLine()类的Graphics方法,也可以使用draw()的{​​{1}},在这种情况下,您需要Graphics2D - 参数仍然存在相同 - 开始x,开始y,结束x和结束y



这是一个更好地解释一点的图像: enter image description here

答案 1 :(得分:3)

Performing Custom Painting2D Graphics开始。

基本上,您需要一个鼠标监听器来监控用户与您的面板的互动,请查看How to write mouse listeners以获取更多信息。

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

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

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

<强>更新

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

答案 2 :(得分:1)

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

您需要一个Line(您的自定义)对象,该对象是动态创建的,并放置在正在监听JPanel的{​​{1}}上。画布区域是MouseEvent本身。您还需要将MODEL与VIEW分开,以便您的自定义画布JPanel可以使用JPanel的覆盖正确绘制自己

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

答案 3 :(得分:1)

您需要在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)

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