我之前有一个问题,但它是非常糟糕的发布,所以这里再次,根据更好的规则。
我想创建一个图形的一些风格像这样的图片:
。
它是基于物理法,Snell's Law。到目前为止,我已经设法用一个基本的Line2D.Double自己绘制图形,你可以看到here (Line.java)。然后,所有我需要做的是,在接口类,在该类中的行添加到阵列像这样:
LinesArray.addLine(150 , 25 , 150 , 275);
每一次它增加了一个新的,它重新绘制,你可以在代码中看到样品。
但问题是,我不知道如何使这个互动。我想让它变成互动的,因为你可以实际移动这些线条,同时你移动第一条线,第二条线会根据斯涅尔定律公式移动,即:
n1 * sin (a1)= n2 * sin(a2)
考虑到a1是第一个图像中的第一个(左)角,而a2是第二个(右)角。
我希望实现的一个完美例子是this one。 如果互动运动太困难(我在2天的时间表),this example也是一种可能性。
纠正我,如果我错了,但对于第二个,我需要做的就是计算鼠标的坐标并绘制并计算从那里的一切。
Here (menu_ui.java)是我的接口类,其中我正在使用的行的方法是“menuSnell()”和here (Snell.java是包含逻辑的我的Snell类。对于葡萄牙语的评论道歉,但它是相当简单的代码,你并不真正需要评论来理解,再加上我已经分离成可读的方法。
所以基本上,我的问题是我如何使这些线以上述方式互动。
谢谢!
你需要为你的组件添加一个'MouseListener',监控鼠标点击并确定点击是否在一条线上...... – MadProgrammer
是的 - 这是完全正确的。你需要1)在一个面板(或等同物)中绘制你的图像,2)添加一个“MouseListener”(触发一个“事物已更改”事件),3)让鼠标事件“重绘()”你的图形对象, 4)子类“paint()”来调用你的图形代码。这里有一个很好的教程:http://docs.oracle.com/javase/tutorial/2d/advanced/user.html – FoggyDay