Я использую Prefuse-библиотеку для размещения узлов в приложении JavaFX (вообще без Swing), и меня особенно интересует RadialTreeLayout.
Моя проблема в том, что мои узлы - это не просто кружки, но рядом с ними есть метка слева или справа (в зависимости от того, какой стороной является родительский узел). Так что текст узлов иногда перекрывается.
Просматривая исходный код RadialTreeLayout.java в Prefuse, кажется, что компоновка может быть достаточно умной, чтобы учитывать узлы переменного размера. Я могу ошибаться, так как не понимаю алгоритм, но Javadoc говорит:
"... Диаметры узла учитываются для улучшения распределения пространства
для узлов переменного размера. "
Но я думаю, что мне даже не нужны узлы переменного размера, мне просто нужно дать им фиксированный нестандартный размер, по крайней мере, для начала.
И вот мой актуальный вопрос: Как передать ширину / высоту алгоритму макета в качестве параметров? Я вполне уверен, что это делается с помощью методов Node.setXXX, но я не знаю правильных ключей / вызовов / синтаксиса.
У меня есть объект Graph, заполненный узлами:
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.