Vaadin als Swing-Ersatz

vorhergehende Artikel in: Java Komponenten
12.11.2019

Bereits in einem kürzlich erschienenen Artikel hier auf der Webseite habe ich vom Ausprobieren neuer Frameworks geschrieben - dieser Artikel behandelt ein weiteres...

Ich habe nach der Entdeckung von Vaadin zunächst einmal sehr euphorisch reagiert - schien es mir doch zu versprechen, dass ich als eingefleischter Desktop-Java-Programmierer kaum umlernen müsste um Anwendungen als Webanwendung zur Verfügung zu stellen.

Ich entschloss mich daher, diese Hypothese kleineren Tests zu unterziehen: Der erste Test war eigentlich nicht ernstzunehmen: Ich las die Playlists meines DVB-C->IP Umsetzers aus und erstellte daraus tabellarische Übersichten, denen ich in jeder Zeile das Senderlogo, den Namen des Senders sowie zwei Knöpfe spendierte: einen zum Abspielen des Streams und einen zum Einreihen einer Aufnahme nach Konfiguration einiger Eckdaten wie Startzeit und Dauer.

Nachdem ich dieses kleine Projekt für mich befriedigend abgeschlossen hatte, konnte ich darüber nachdenken ernsthaftere Tests ins Auge zu fassen. Ich habe bei mir auf der Festplatte noch ein Solitair-Spiel herumliegen, das eines meiner ersten vollständigen Programme in Java darstellt.

Ich nutzte die Zeit um zunächst die Abhängigkeiten von javax.swing.* in diesem Projekt in einigen wenigen Klassen zusammenzudrängen. Die Idee dahinter war, dass es mir damit gelingen sollte, die Mehrzahl der Klassen ohne nochmalige Anpassung in das neue Web-Projekt zu migrieren und nur wenige Klassen mit überschaubarem Aufwand von Swing zu Vaadin zu migrieren. Ich habe das Projekt nach anfänglichen Erfolgen zunächst ruhen lassen. Das soll nicht bedeuten, dass ich Vaadin für ungeeignet halte. Meine gewonnenen Erkenntnisse lassen mich aber zu dem Schluss kommen, dass einige meiner Grundannahmen falsch sind und ich den generellen Migrationsplan nicht mehr so aufrechterhalten kann wie gedacht.

Folgende Tatsachen brachten mich zu dieser Erkenntnis (Stand Version des Frameworks: 13.0.11):

Fehlende Unterstützung der mittleren und rechten Maustaste
Obwohl in der API die Möglichkeit angedeutet wird, bei ClickEvent die jeweilige Maustaste zu ermitteln, lösen aktuell die beiden genannten dieses Event gar nicht aus
Keine stabile Unterstützung von Doppelklicks mit der Maus
Ein ClickEvent erlaubt es, die Anzahl der Clicks zu ermitteln. Allerdings werden Doppelklicks nicht immer propagiert, so dass man auf diese Interaktionsmetapher in der Anwendung nicht zurückgreifen sollte.
Komplizierte Realisierung von GUI-Modifikationen aus dem Backend
Mein Projekt baut zunächst die GUI auf und lässt darin Platzhalter leer, deren Initialisierung längere Zeit in Anspruch nimmt, damit die Responsiveness für den Anwender besser wird. So etwas ist in Vaadin nur sehr schwer zu erreichen - entweder durch Hacks oder durch die Entwicklung eigener Komponenten - es war aber gerade mein Ziel, dass ein ausgewiesener Swing-Programmierer sich nicht mit Web-Frontends belasten müssen sollte.
Im Web gelten andere Timings beim Repaint
Die Struktur meiner Anwendung (ich lernte gerade programmieren!) baut den gesamten GUI-Inhalt bei jeder Interaktion (Karte bewegen) neu auf - am Desktop bemerkt das der Anwender nicht - im Browser ist das so langsam, dass es extrem auffällt. Daher muss zumindest zur Entschärfung dieses Effekts der Entwickler zunächst die Ursprungsanwendung umbauen...

Als Browser wurde für die Tests übrigens der zum Zeitpunkt des Verfassens dieses Artikels die aktuellste verfügbare 64-Bit-Firefox-Version 69.0 unter Ubuntu 18.04 benutzt.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Multi-User-WebDAV, Docker, GitHub

    17.11.2019

    Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...

    Weiterlesen...

Neueste Artikel

  • Migration der Webseite und aller OpenSource Projekte

    In eigener Sache...

    Weiterlesen...
  • AutoHideToolbar für Java Swing

    Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.

    Weiterlesen...
  • Integration von EBMap4D in die sQLshell

    Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.