画一条连接两个矩形的线

时间:2011-01-10 13:46:43

标签: java swing graphics awt

我在Swing / AWT中制作自己的类图应用程序,但我停止了这个功能:

  • 我想在已经选择的Class矩形和目标Class矩形之间绘制一条线,但是line有一个特征,就是当我移动其中一个矩形时,连接它们的线会以直线方式弯曲移动矩形,我希望下面的图片展示我想要实现的目标: alt text

非常感谢一般指南或示例代码

4 个答案:

答案 0 :(得分:4)

我不了解Java,但您可以遵循以下步骤:

  • 找到矩形的每一行的中间(应该很容易,只需avarage x1 + x2和y1 + y2)
  • 使用毕达哥拉斯公式确定在上一步中获得的点上彼此最接近的边。
  • 从xa,ya开始绘制一条线(在上面的步骤中得到的第一个点),然后沿远离矩形的方向绘制一条线。您应该知道这个方向,因为您可以知道此点所在的线段。
  • 对xb,yb(第二个矩形上的点)执行相同操作。如果线条方向相反,则应将它们绘制到xa-xb或ya-yb的中间位置(取决于您是水平还是垂直绘制)。如果它们是垂直的(是正确的单词吗?)你应该将它们绘制到它们交叉的点,所以你绘制从xa,ya到xa,yb或xa,ya到xb,ya的线,这取决于你是否绘制了水平或垂直线。
  • 应该进行一些额外的检查以确定矩形是否重叠。例如,您不应该在同一方向绘制线条。在你无法确定如何绘制这些直线的情况下,你可能只需在两点之间绘制一条对角线即可。

对于实现,您可以构建一个使用观察者模式来侦听它所遵循的两个矩形的线类,这样只要其中一个移动或调整大小,它就可以自行更新。

答案 1 :(得分:3)

http://java-sl.com/connector.html 希望这会有所帮助。

答案 2 :(得分:1)

尝试使用observer模式。应该通过对象的新位置通知所有与移动对象连接的线并正确“弯曲”。当然,首先要实现一些连接2个对象的逻辑。

答案 3 :(得分:-1)

尝试创建一个名为“ConnectingLine”或类似的类。这个类将有几个段(这是dia中这些行部分的名称,这是当前我最喜欢的uml建模工具),它将逐个计算。你当然会有一个sepaparate类;)叫做“LineSegment”。我认为这应该使您更容易执行执行此任务所需的数学计算。

这也可以使段“自动路由或不”轻松d (^_^) b