© StudioSmart/Shutterstock.com
Diagramme mit yFiles for Java interaktiv bearbeiten

Darstellen, Steuern und Kontrollieren


yEd ist der Visio-Ersatz für Linux und macOS. Im letzten Heft haben wir den Grafikerzeuger betrachtet, der das Programmieren von Diagrammen in Java erlaubt. yFiles kann auch für Interaktivität sorgen und den User im Umgang mit dem Chart leiten.

Zur Erinnerung: yFiles ist eine Java-Bibliothek für Diagrammprogrammierer. Sie erspart uns, mit GDI herumzuspielen und Diagrammklassen zu erzeugen. yFiles bildet Diagramme mit GraphComponent am Bildschirm ab.

Im letzten Heft habe ich die Infrastruktur mit einer Klasse namens SUSExample erzeugt (Listing 1).

Listing 1

public class SUSExample { private GraphComponent graphComponent; public SUSExample(String title) { JFrame frame = new JFrame(title); . . . graphComponent = new GraphComponent(); frame.add(graphComponent, BorderLayout.CENTER); . . . }

main ruft mit EventQueue.invokeLater initialize() auf. Die Funktion baut dann das eigentliche Diagramm aus Einzelobjekten zusammen. Wer Graphendatenstrukturen kennt, versteht das API schnell.

Interaktiver Helfer

Am Ende des letzten Texts war unser Diagramm am Bildschirm zu sehen. Passiert ist bis dato noch nicht viel. Wir hatten bisher keine Interaktionslogik angemeldet. Wir ergänzen nun initialize() um einen Aufruf der Funktion setInputMode, die ein IInputMode-Objekt annimmt:

private void initialize() { . . . graphComponent.setInputMode(new GraphEditorInputMode()); }

yFiles schreibt die Klasse GraphEditorInputMode als Standardverhalten vor. Wenn wir sie in eine GraphComponent einfügen, entsteht ein Diagramm mit Interaktivität. Wir starten unser Programm und klicken eins der Diagrammelemente an. yFiles zeigt die von yEd bekannten Vergrößerungselemente an. Die einzelnen Teile lassen sich via Drag and Drop über den Bildschirm verschieben. Dabei deaktivieren wir unser im letzten Heft angelegtes Layout, das nicht mehr aktiviert wird, wenn wir ein Element am Bildschirm verschieben. Anschließend finden wir einige nützliche yEd-Funktionen wieder: Via F2 lässt sich der Text, der in einem Element angezeigt wird, verändern.

Den Eingabespielraum des Benutzers einschränken

Legen Sie eine GraphEditorInputMode-Klasse an. Auf diese Weise darf der Benutzer mit dem Diagramm machen, was er möchte. Ein Doppelklick in den leeren Hintergrund erzeugt einen neuen Node. Er verhält sich entsprechend der von initialize angelegten Elemente.

GraphComponent ist ein Canvas Control und hat deshalb einige Ereignisbearbeiter im Gepäck. Wir können mit Mausereignissen Interaktionen zusammenbauen, wenn wir Ereignismethoden anmelden und die ankommenden Klicks auswerten.

yFiles lebt davon, uns Arbeit abzunehmen. Deshalb gibt es IInputMode: eine Abstraktionsschicht, die uns statt der einzelnen Eingabeereignisse fertige, im Diagrammkontext stehende Handlungen zum Interagieren, Zustimmen und Ablehnen anbietet.

Innerhalb von IInputMode finden wir eine Hierarchie von „Manager“, die Vergleiche gegen die Basisklasse durchführt. Es kann vorkommen, dass mehrere Manager Interesse an einem Ereignis haben. In diesem Fall sorgt das Prioritätsfeld dafür, dass nur einer der Manager mit dem Ereignis arbeiten darf.

Damit wollen wir zum Problem zurückkehren – neue Nodi frei anzulegen ist ärgerlich. Denken Sie an ein Diagramm, das ein Prozessschaubild darstellt. Hier wäre es nicht schön, wenn der Benutzer weitere Felder erzeugt. Wie verhindern wir das? Zuerst müssen wir den GraphEditorInputMode sichtbar machen, um das Verändern der in ihm gespeicherten Attribute zu ermöglichen:

private void initialize() { . . . GraphEditorInputMode myInputMode=new GraphEditorInputMode(); myInputMode.setCreateNodeAllowed(false); graphComponent.setInputMode(myInputMode); }

GraphEditorInputMode-Objekte nehmen neue Untereingabemodi auf, lassen sich aber auch dazu animieren, bestimmte Ereignistypen anzunehmen beziehungsweise abzulehnen. Unser Code ruft die Funktion setCreateNodeAllowed auf, um das Anlegen von neuen Diagrammelementen auszusc...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang