我正在使用Prefuse 库来布局 JavaFX 应用程序中的节点(根本没有 Swing),而且我对 RadialTreeLayout 特别感兴趣。
我的问题是,我的节点不仅仅是圆圈,而且它们的左侧或右侧也有一个标签(取决于节点的父节点的哪一侧)。所以节点的文本有时会重叠。
浏览 Prefuse 的 RadialTreeLayout.java 的源代码,似乎布局可能足够聪明,可以考虑可变大小的节点。我可能是错的,因为我不理解算法,但 Javadoc 说:
“......节点直径被考虑在内,以改善可变大小节点的空间分配。”
但我想我什至不需要可变大小的节点,我只需要给它们一个固定的自定义大小,至少一开始是这样。
所以我的实际问题是:如何将宽度/高度作为参数传递给布局算法?我很确定它是通过 Node.setXXX 方法完成的,但我不知道正确的键/调用/语法。
我有一个充满节点的图形对象:
Table nodeData = new Table();
nodeData.addColumn("data", NodeData.class);
Table edgeData = new Table(0, 1);
edgeData.addColumn(Graph.DEFAULT_SOURCE_KEY, int.class);
edgeData.addColumn(Graph.DEFAULT_TARGET_KEY, int.class);
Graph graph = new Graph(nodeData, edgeData, false);
Node n1 = graph.addNode();
NodeData data = new NodeData(); // My own "data"-class
data.title = "Root Node";
n1.set("data", data);
我也(显然)有启动 RadialTreeLayout 的简单布局代码,一旦完成,我将边界传递给 JavaFX 节点。