Hinzufügen eines unsichtbaren Stammknotens zum Layout
Wenn der Graph mehrere Baumstrukturen enthält, die voneinander getrennt sind, platziert das Layout
sie einzeln nebeneinander.
Jede verbundene Komponente hat eine eigene radiale Struktur mit kreisförmigen Ebenen.
Manchmal ist es jedoch angemessen, alle verbundenen Komponenten in einer einzigen kreisförmigen
Ebenenstruktur zu erfassen.
Konzeptionell erfolgt dies durch das Hinzufügen eines unsichtbaren Stammknotens
in der Mitte und das Verbinden aller nicht verbundener Baumstrukturen mit diesem Stammknoten.
Abbildung Layout verbundener Komponenten ohne und mit unsichtbarem Stammknoten zeigt den Effekt der Verwendung
eines unsichtbaren Stammknotens.
Dies funktioniert nur, wenn der generische Mechanismus für das Layout verbundener Komponenten
inaktiviert ist.
Gehen Sie zum Hinzufügen eines unsichtbaren Stammknotens zum Layout wie folgt vor:
Rufen Sie die folgenden Methoden auf:
treeLayout.setLayoutOfConnectedComponentsEnabled(false); treeLayout.setInvisibleRootUsed(true);

Layout verbundener Komponenten ohne und mit unsichtbarem Stammknoten
Gleichmäßiger Abstand für den ersten Kreis
Der Radialmodus ist so konzipiert, dass der Platz so optimiert wird, dass
die Kreise einen kleinen Radius haben und der gesamte Platz für das vollständige Layout klein ist.
Um dieses Ergebnis zu erzielen, kann der Layoutalgorithmus größere Lücken in den inneren Kreisen
erstellen, um den Platz der äußeren Kreise besser nutzen zu können.
Er kann Kreise mit ungleichmäßigem Abstand erstellen, insbesondere für den ersten Kreis, wenn alle Knoten denselben übergeordneten
Knoten haben.
Um diesen Effekt zu vermeiden, können Sie erzwingen, dass die Knoten im ganzen ersten Kreis in gleichmäßigen Abständen verteilt werden.
Je nach Struktur des Graphen kann dies dazu führen, dass das Gesamtlayout mehr Platz in den anderen Kreisen
verbraucht, aber der Ergebnisgraph ist möglicherweise ansehnlicher.
Gehen Sie zum Aktivieren gleichmäßiger Abstände wie folgt vor:
Verwenden Sie die Methode setFirstCircleEvenlySpacing:
treeLayout.setFirstCircleEvenlySpacing(true);

Gleichmäßiger Abstand für den ersten Kreis
Für Experten: Alternierende Knotenanordnung für alle Ebenen erzwingen
Wenn der Layoutmodus
ALTERNATING_RADIAL
verwendet wird, prüft das
Layout, ob durch eine alternierende Knotenanordnung in einer Ebene Platz eingespart werden kann.
Wenn kein Platz eingespart werden kann, verwendet das Layout die normale
radiale Anordnung. Deshalb liefern der Radialmodus und der alternierende Radialmodus für viele
Graphen mit wenigen Knoten dasselbe Ergebnis, weil die alternierende Anordnung in keiner Ebene Platz einspart.
Es ist möglich, die Platzprüfung zu inaktivieren, d. h., um eine alternierende Anordnung
für alle Ebenen zu erzwingen, selbst wenn diese zu einer Verschwendung von Platz führt.
Verwenden Sie die Methode setAllLevelsAlternating:
treeLayout.setAllLevelsAlternating(true);
Für Experten: Mehrere Kreise pro alternierender Ebene
Wenn der Layoutmodus
ALTERNATING_RADIAL
verwendet wird,
platziert das Layout die Knoten derselben Ebene abwechselnd in zwei Kreisen anstatt in einem einzigen Kreis.
Es ist auch möglich, die Anzahl der Kreise zu erhöhen.
Verwenden Sie die Methode setNumberOfAlternatingCircles:
treeLayout.setNumberOfAlternatingCircles(3);
In diesem Fall werden drei Kreise verwendet. Das bedeutet, wenn das Flag
allLevelsAlternating auf
true
gesetzt ist,
platziert das Layout jede Ebene von Knoten auf drei alternierenden Kreisen.
Wenn das Flag allLevelsAlternating auf false
gesetzt ist, prüft das Layout,
ob jede Ebene mehr Platz benötigt, um die Knoten auf einem Kreis oder auf drei Kreisen zu platzieren.
Hohe Werte für die Anzahl alternierender Kreise dürfen nicht verwendet werden, weil sie den
Algorithmus verlangsamen und Linkkreuzungen verursachen können.
Wenn Sie die Anzahl alternierender Kreise auf
0
setzen und das Flag
allLevelsAlternating den Wert false
hat,
hat diese eine Sonderbedeutung.
In diesem Fall versucht ein heuristisches Verfahren, die optimale Anzahl an Kreisen pro Ebene automatisch zu berechnen.
Deshalb kann jede Ebene eine andere Anzahl an Kreisen haben, die von der Anzahl der Knoten
und den gleichgeordneten Beziehungen zwischen den Knoten abhängig ist.
Für Experten: Maximalen Winkel für untergeordnete Knoten festlegen
Wenn ein Knoten viele untergeordnete Knoten hat, können diese über einen größeren Teil des Kreises verteilt und
deshalb um nahezu 360 Grad um den Knoten herum platziert sein.
Dies kann zu Überschneidungen von Links mit einigen Knoten führen.
Diese Mangel kann behoben werden, indem das Offset zwischen übergeordnetem Knoten und untergeordneten Knoten
erhöht wird.
Dies wirkt sich jedoch global auf das Layout aus, d. h., das auch Knoten betroffen sind, die diesen Mangel nicht aufweisen.
Um eine solche globale Änderung zu verhindern, können Sie den maximalen Winkel zwischen den beiden Strahlen
vom übergeordneten Knoten (sofern dieser nicht der Stammknoten ist) zu seinen beiden äußeren untergeordneten Knoten beschränken.
Diese Aktion erhöht das Offset zwischen übergeordnetem Knoten und untergeordneten Knoten nur, wenn es erforderlich ist.
In der Abbildung Maximaler Winkel für untergeordnete Knoten können Sie im Layout auf der linken Seite sehen, dass sich viele Links
mit anderen Knoten überschneiden.
Im Layout auf der rechten Seite können Sie sehen, wie dieses Problem durch Definition eines maximalen Winkel für untergeordnete Knoten zwischen den beiden Strahlen vom übergeordneten
Knoten zu seinen beiden äußeren untergeordneten Knoten gelöst wurde.

Maximaler Winkel für untergeordnete Knoten
Gehen Sie wie folgt vor, um einen Winkel in Grad zu definieren.
Verwenden Sie die Methode setMaxChildrenAngle:
treeLayout.setMaxChildrenAngle(100);
Empfohlene Werte sind
30
bis 180
. Wenn Sie den Parameter auf den Wert
0
setzen, ist der Winkel nicht beschränkt. Die Berechnung des Winkels ist über
180 Grad und bei einem Seitenverhältnis ungleich 1,0 nicht präzise.