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 Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Aviator + Websockets

    15.06.2019

    Nachdem ich in den letzten Wochen und Monaten meine Zeit und Energie in die sQLshell gesteckt habe - was sowohl Bugfixing als auch neue Features betraf - habe ich nun endlich die Zeit gefunden, ein bereits lange überfälliges Feature an dWb+ und speziell am aviator zu implementieren.

    Weiterlesen...

Neueste Artikel

  • Neue Version plantumlinterfaceproxy napkin look

    Es gibt eine neue Version des Projektes plantumlinterfaceproxy - Codename napkin look.

    Weiterlesen...
  • Apache HTTPCore5 funktioniert nicht mit Docker

    Ich habe neulich drei Stunden meines Lebens verschwendet weil ich unbedingt die neueste Version der HTTPCore5 Library von Apache einsetzen wollte.

    Weiterlesen...
  • Entwurfsmodus für beliebige SVG Graphiken

    Nachdem ich in der Vergangenheit immer wieder Weiterentwicklungen der Idee vorgestellt habe, Graphiken mit dem Computer so zu ezeugen dass sie eine gewisse "handgemachte" Anmutung haben, habe ich nunmehr die durchschlagende Idee gehabt:

    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, muß 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 GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.