SpaiR ImGui

White_Fox

Top Contributor
Moin allerseits

Ich hatte unlängst mal erwähnt, mir bei Gelegenheit mit der ImGui-Bibliothek bzw. dessen Javawrapper ansehen zu wollen und versprochen, darüber Rückmeldung zu geben. Vor zwei Wochen habe ich mir die Gelgenheit genommen.

Eine kurze Zusammenfassung vorneweg: Die Bibliothek macht Spaß, ich hatte bei der Einbindung des Javawrappers kaum Probleme, und die ImGui ist sehr einfach zu verwenden. Die Oberfläche sieht klasse aus, ist aus meiner Sicht aber schon etwas speziell. Aber vielleicht setzt der ein oder andere die Bibliothek ja künftig auch öfter ein, es würde mich schon sehr freuen wenn man nicht mehr immer nur Swing und JavaFX vorgesetzt bekommt wenn man GUIs in Java machen will.


Dear ImGui ist eine "lightweight, bloatfree" C++-Bibliothek, wobei man "lightweight, bloatfree" tatsächlich wörtlich nehmen kann. Die Bibliothek wurde, so habe ich es jedenfalls verstanden, ursprünglich mal dafür geschrieben um sie z.B. in Spiele-Engines einzubinden. Daher braucht sie noch einen Unterbau, z.B. OpenGL womit z.B. das Fenster erzeugt wird. Fragt mich nicht warum, dafür habe mich damit nicht tief genug befasst. Tja, und dann gibt es Wrapper für allerlei Programmiersprachen, ich meine ich habe das mindestens auch für Python und .NET gesehen, und eben Java.

Fangen wir mal mit dem Einbinden an. Es gibt da eine recht umfangreiche Bibliothekensammlung für Spieleentwicklung in Java (LWJGL), und jemand der das mitentwickelt oder zumindest viel damit zu arbeiten scheint, hat da ein recht anschauliches Erklärvideo gemacht.


Bei mir hat die Videoerklärung zum Einbinden nicht funktioniert, dafür aber das Einbinden des Repositories in Gradle (was beim Videoerstellern nicht funktioniert hat). Es könnte bei mir aber vermutlich daran gelegen haben, daß die Gradlezeile zum Kopieren Groovy-Code war, ich Gradle aber immer in Kotlin aufsetze. Und dann lief es auch schon und ich konnte das Beispiel nachbauen. Und danach mit einem eigenen Projekt anfangen.

Wenn man Swing oder JavaFX gewohnt ist, dann ist man bei ImGui zunächst erstmal etwas ratlos. Da wird kein Objekt von der Klasse Button instanziert oder dergleichen, ImGui ist da viel primitiver: Man überschreibt eine Methode, und zeichnet in dieser Methode zeichnet die komplette GUI, fragt Daten ab oder stellt welche ein. Diese Methode wird dann zu jedem Frame aufgerufen, in meinem Projekt ist das die Methode paintImGui().
Ja, man muß sich um alles selbst kümmern...aber das ist ok, meistens tut man das ja sowieso. Und lieber so, als wenn man sich um etwas selbst kümmern will und die verdammte Bibliothek läßt einen nicht.

Das Demoprojekt, an dem ich mich versucht habe, ist hier:

Falls das mal jemand selber ausprobieren will, einfach klonen, ein Konsolenfenster öffnen und das Projekt mit 'gradle run' laufen lassen. Um da aber was Sinnvolles mit anfangen zu können, müßt ihr auf russisches Tastaturlayout umschalten (oder ihr tauscht die zwei Dateien im Ordner 'de' aus, und korrigiert das Regex in der Methode filterFormatAndConcat(String userInput) in der Klasse TypingTrainer auf lateinische Buchstaben.

Die Lernkurve für ImGui ist relativ flach. Ich habe das Projekt am Sonntag aufgesetzt und ImGui erfolgreich eingebunden. Hat etwas gedauert weil ich, wie gesagt, Groovy und Kotlin nicht auseinanderhalten kann.🤪 Am Montag habe ich dann geschnallt wie ImGui eingesetzt wird und am Mi war die GUI, so wie sie ist, weitgehend fertig inkl. der Darstellung russischer Schriftzeichen, wobei ich jeden Tag nur ca. ein bis anderthalb Stunden Zeit nach der Arbeit hatte. Für das eigentliche Programm habe ich weitaus mehr Zeit benötigt, vor allem das Verarbeiten russischer Buchstaben, aber das hatte alles nichts mit ImGui zu tun.

Und selbst wenn man für ImGui zu...müde ist: Es gibt ein Projekt, bei dem man sich ImGui einfach zusammeklicken kann:

Man muß es sogar noch nichteinmal klonen, man kann es einfach online benutzen:

ImStudio spuckt zwar C++-Code aus, aber das ist eigentlich kein Problem, der Javacode ist nah genug am C++-Original gehalten daß man C++-Beispiele schnell und gut anpassen kann. Das ist, soweit ich das bei meinem Projekt sehen konnte, schon recht gut gemacht. Die Javadocs vermisse ich oft, ab und an sind sie aber mal da, aber es ging auch so.

Wie anfangs geschrieben, finde ich ImGui etwas speziell. Das fehlen von z.B. Layoutmanagern ist so eine Sache, macht es nicht für alles geeignet. Ob ich mein jCLS-Projekt auf ImGui umstricken werde...keine Ahnung, wahrscheinlich erstmal doch nicht. Aber für viele Programme ist es doch geradezu perfekt, mir fallen da z.B. zahlreiche CAD-Programme ein (daß ImGui praktisch ein Fenster im Hauptfenster erzeugt, man viele solcher Fenster haben und frei herumschieben kann – auch außerhalb es Hauptfensters – eröffnet tolle Möglichkeiten), aber auch alles was vornehmlich technisch orientierte Oberflächen sind die viele Daten anzeigen müssen. Oder z.B. Mediaplayer.

Ansonsten ist hier noch eine hilfreiche Erklärseite, mit ein paar Beispielen. Viel Spaß beim Ausprobieren.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben