Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java组件上查找要绘制的空间_Java_Algorithm_Swing - Fatal编程技术网

在Java组件上查找要绘制的空间

在Java组件上查找要绘制的空间,java,algorithm,swing,Java,Algorithm,Swing,我有一个java组件,在上面我画了100×40个矩形来表示一个图的节点。当添加一个新节点时,我希望能够将其定位在一个有用的位置。目前,我只需选择x轴上的下一个可用空间。然而,这意味着当我加载一个图形时,我会得到一个从视图向右延伸的大型节点链——这并不理想 更好的解决方案可能涉及在最靠近用户视图中心点的点添加节点。我相信这个问题有很多解决方案,但我想不出一个合理的方法来实现这一点 我有三种与此问题相关的方法: positionNode(Node) // which tries to find su

我有一个java组件,在上面我画了100×40个矩形来表示一个图的节点。当添加一个新节点时,我希望能够将其定位在一个有用的位置。目前,我只需选择x轴上的下一个可用空间。然而,这意味着当我加载一个图形时,我会得到一个从视图向右延伸的大型节点链——这并不理想

更好的解决方案可能涉及在最靠近用户视图中心点的点添加节点。我相信这个问题有很多解决方案,但我想不出一个合理的方法来实现这一点

我有三种与此问题相关的方法:

positionNode(Node) // which tries to find suitable x,y to place a node
setPos(x,y) // which moves a node to the respective position
findElementAt(x,y) // which returns a node's model if such a node exists at (x,y)

一个可能的解决方案可能涉及围绕中心点旋转,但我无法想象一个好的解决方案来实现这一点。

听起来像是一个基于力的布局的机会:

)


当你说图形时,我假设节点是相互连接的,所以画它们,使它们的线最小地交叉,以便更容易直观地看到图形告诉你的内容似乎很重要。基于强制的布局有助于安排图形,使其不受许多线相互交叉的“压力”影响。

听起来是基于强制的布局的一个机会:

)


当你说图形时,我假设节点是相互连接的,所以画它们,使它们的线最小地交叉,以便更容易直观地看到图形告诉你的内容似乎很重要。基于强制的布局可以帮助安排图形,使其不受许多线相交的“压力”影响。

图形渲染是一个难题,也是许多研究的主题

如果要将节点做成一种束,而不是一行节点,那么主要的缺点是从节点出来的线会被其他子节点重叠

你可以做一个正方形的包裹或一个圆形的包裹。若要生成一个平方束,请取节点数的平方根并添加一个。例如,如果有17个节点,则正方形的边为4+1=5。所以你有一个5 x 5的正方形。将每个节点放置在正方形的单元格中

要做成一个圆束,请画同心圆。所以第一个节点在中心。然后计算一个围绕该节点的假想圆。根据所需的空间大小,按度将圆划分为若干段。然后将每个附加节点定位在每个线段的中心


请注意,您可能希望重叠节点。根据界面的工作方式,重叠可能使您能够容纳更多节点。

图形渲染是一个难题,也是许多研究的主题

如果要将节点做成一种束,而不是一行节点,那么主要的缺点是从节点出来的线会被其他子节点重叠

你可以做一个正方形的包裹或一个圆形的包裹。若要生成一个平方束,请取节点数的平方根并添加一个。例如,如果有17个节点,则正方形的边为4+1=5。所以你有一个5 x 5的正方形。将每个节点放置在正方形的单元格中

要做成一个圆束,请画同心圆。所以第一个节点在中心。然后计算一个围绕该节点的假想圆。根据所需的空间大小,按度将圆划分为若干段。然后将每个附加节点定位在每个线段的中心


请注意,您可能希望重叠节点。根据界面的工作方式,重叠可能使您可以容纳更多节点。

回答得好,谢谢。我真的很喜欢圆圈这个主意。但是,您知道是否有可能在Swing中找到组件的可见部分吗?i、 e.如果我的“画布”是可滚动的,我希望第一个节点出现在可见区域的中心,而不是整个区域的中心。也许这应该是另一个问题(不确定规则)?回答得很好,谢谢。我真的很喜欢圆圈这个主意。但是,您知道是否有可能在Swing中找到组件的可见部分吗?i、 e.如果我的“画布”是可滚动的,我希望第一个节点出现在可见区域的中心,而不是整个区域的中心。也许这应该是另一个问题(不确定规则)?