我现在完全失去了。我在使用Java构建GUI方面没有太多工作,我一直在阅读有关swing和JPanel的所有内容,我认为我想要做的是可能的,我只是没有想出如何
我正在尝试构建一个GUI,您可以在某个绘图区域内绘制直线,我希望能够获得起点/终点坐标,以便用这些点进行一些数学运算。任何帮助将不胜感激!
答案 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
答案 1 :(得分:3)
从Performing Custom Painting和2D 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)
要使用鼠标移动绘制线条,您还可以添加鼠标移动侦听器。