java - 在 Java 组件上寻找空间进行绘制

标签 java algorithm swing

我有一个 Java 组件,我在其上绘制了 100 x 40 个矩形来表示图形的节点。添加新节点时,我希望能够将其定位在有用的位置。目前,我只是选择 x 轴上的下一个可用空间。然而,这意味着当我加载一个图表时,我会得到一个大的节点链,从右侧跨越 View ——这并不理想!

更好的解决方案可能涉及在最接近用户 View 中心点的点添加节点。我敢肯定这个问题有很多解决方案我想不出一个合理的方法来实现这个。

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

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)

一个潜在的解决方案可能以某种方式涉及围绕中心点盘旋,但我无法想象执行此操作的好的解决方案。

最佳答案

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

如果你想把节点做成一个束,而不是一行节点,主要的缺点是从节点出来的线会被其他 child 重叠。

您可以制作方形束或圆形束。要制作方形束,请取节点数的平方根并加一。例如,如果您有 17 个节点,则正方形的边长为 4 + 1 = 5。因此您有一个 5 x 5 的正方形。将每个节点放置在正方形的一个单元格中。

要制作圆形束,请绘制同心圆。所以第一个节点在中心。然后计算围绕该节点的假想圆。根据您需要的空间大小,将圆逐渐分成几段。然后将每个附加节点定位在每个段的中心。

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

关于java - 在 Java 组件上寻找空间进行绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624225/

相关文章:

java - 如何禁用特定网址的 Spring 安全性

java - 图像不是显示在 jar 中而是显示在编译器中?

algorithm - 半音阶乐器调音器的稳健算法?

python - 大型矩阵上的高效双循环

java - 检测 JFrame 大小调整

java - 如何检查 Lat Long 在特定城市内?

java - 当我尝试删除对象时,我的 Spring jpaRepository 抛出 TransactionRequiredException

algorithm - 网格生成算法

java - 椭圆形移动程序。椭圆不动,有什么我可以在这里炼化的吗?

java - 识别用于在 Java 中显示频繁数据输入的 Swing 线程