ubuntuusers.de

Glade 3.0 + Eclipse + java-gnome

Status: Ungelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

bacchus_zh_ch

Avatar von bacchus_zh_ch

Anmeldungsdatum:
5. September 2006

Beiträge: Zähle...

Hi Leute Also ich wollte gestern mal "schnell" mein erstes kleines Programm mit Gtk-java-binds und Glade machen, da hier die GUI's so schön deklarativ erstellt werden. Da ich die schnautze voll haben von Swing nd bitte auch kein SWT....und jqami habe ich auch schon angeschaut 😎 .

So nun habe ich gestern das schöne http://people.redhat.com/overholt/nativeeclipse/index.html gesehen und musste feststellen das es offensichtlich mit den java-binds 2.x laufen und da ich java-gnome4.x benütze und diese nicht abwärtzkompatibel ist.

Mein Problem ist nun folgendes, ich würde gerene die Signale die das GUI abschickt so elegant wie im http://people.redhat.com/overholt/nativeeclipse/index.html lösen. Aber leider finde funktioniert es offensichtlich nicht mehr gleich wie mit den java-gnome2.x binds.

Und die Lösung der java-gnome4.x wiget.connect(new handler{ funktion(){}}) ist echt hässlich. Nun ich würde gerne das ganze wie im http://people.redhat.com/overholt/nativeeclipse/index.html einfach mit java-gnome4.x.....hat jemand eine Idee?

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

bacchus_zh_ch schrieb:

Hi Leute Also ich wollte gestern mal "schnell" mein erstes kleines Programm mit Gtk-java-binds und Glade machen, da hier die GUI's so schön deklarativ erstellt werden. Da ich die schnautze voll haben von Swing nd bitte auch kein SWT....und jqami habe ich auch schon angeschaut 😎 .

So nun habe ich gestern das schöne http://people.redhat.com/overholt/nativeeclipse/index.html gesehen und musste feststellen das es offensichtlich mit den java-binds 2.x laufen und da ich java-gnome4.x benütze und diese nicht abwärtzkompatibel ist.

Mein Problem ist nun folgendes, ich würde gerene die Signale die das GUI abschickt so elegant wie im http://people.redhat.com/overholt/nativeeclipse/index.html lösen. Aber leider finde funktioniert es offensichtlich nicht mehr gleich wie mit den java-gnome2.x binds.

Vorab: Ich kenne mich mit java-gnome nicht aus und habe leider keine Lösung. Aber wenn ich dich richtig verstanden habe, dann möchtest du auto-connection von Signalen. So wie ich das dem Screencast entnehme war die 2.x API wohl:

LibGlade glade = new LibGlade("foo.glade", this);

Da wurde offensichtlich die Instanz (this) übergeben, damit dann per Reflection geguckt werden konnte, ob die Instanz Methoden hat, die zu den in Glade angegebenen Signal-Handlern passen, und diese dann verbunden.

Laut der API-Dokumentation von zu 4.x scheint man jetzt Glade-Dateien so zu laden:

XML glade = Glade.parse("foo.glade", "window1");

Irgendwie sehe ich nicht, wie da Signal-Auto-Connection passieren könnte, da gar keine Instanz übergeben wird. Ich frage mich, ob das einfach nur noch nicht für java-gnome 4.x implementiert ist, oder ob man das absichtlich weggelassen hat.

Außerdem ist libglade deprecated seitdem GTK+ selbst Glade-Dateien laden kann - nämlich über die Klasse GtkBuilder. Diese scheint jedoch in java-gnome auch noch nicht gebunden zu sein.

Wenn du Englisch kannst, dann kannst du ja mal auf der Mailing-Liste von java-gnome nachfragen, ob es derzeit eine Möglichkeit gibt Signale aus Glade-Dateien heraus automatisch zu verbinden, und was die Pläne bezüglich GtkBuilder statt libglade sind.

Und die Lösung der java-gnome4.x wiget.connect(new handler{ funktion(){}}) ist echt hässlich.

Das ist unter Java die übliche Art und Weise, wie man Signale/Listeners manuell mit Handlern verbindet. Das ist bei Swing oder SWT prinzipiell auch nicht anders. Anonyme innere Klassen sind in Java schon immer gewöhnungsbedürftig. Unter anderem deshalb möchte man ja in Java 7 auch Closures einführen.


Noch kurz eine Werbung für ein anderes Produkt:

Eine Option für Java-ähnliche GTK+-Entwicklung ist die Programmiersprache Vala. Es werden keine Laufzeitumgebeung und keine Laufzeit-Bindings ("Wrapper") benötigt, sondern nur Compilezeit-Bindings. Die GTK+ Bindings sind zudem immer auf dem aktuellsten stand, da sie automatisch über GObjectIntrospection generiert werden. Du kannst also auch GtkBuilder etc. verwenden (GTK+ Beispiele).

Zudem hat die Sprache einige Features, die es in Java nicht gibt, aber sehr hilfreich sein können (z.B. Closures, automatische Properties, Delegates, Signale). Ein auf Java-Entwickler zugeschnittenes Tutorial hinsichtlich der Unterschiede gibt es hier: Vala for Java Programmers, für Ubuntu gibt es ein PPA mit dem aktuellsten Compiler.

Ist vielleicht nicht jedermanns Sache, zumal es noch nicht Version 1.0 erreicht hat und man auch keine IDE mit Refactoring-Pipapo wie Eclipse hat, aber es werden bereits brauchbare Anwendungen damit entwickelt, z.B. Shotwell, APT2 und einige andere.

Antworten |