Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GUI mit Java - Tipps? (https://www.delphipraxis.net/191454-gui-mit-java-tipps.html)

Rabenrecht 18. Jan 2017 11:24

GUI mit Java - Tipps?
 
Einleitung/Rant:
Vor ca. 2 Wochen habe ich ein privates Projekt angefangen (weil ich bei der Arbeit ja nicht schon genug programmiere... :P ). Da war ich auch richtig heiß drauf: endlich wieder alles selber entscheiden können, endlich wieder über alles den Überblick haben. Und vor allem: an etwas arbeiten, was ich selbst benutzen möchte.

Zudem habe ich mich auch darauf gefreut, wieder mit Intellij arbeiten zu können. Da gibt es doch viele Dinge, die für mich das Programmieren sehr viel leichter gestalten als zb. mit Delphi :P

Aaaaaber... dann bin ich gegen eine Wand gelaufen.
Meine übliche Vorgehensweise ist wie folgt: erst GUI erstellen, dann Presenter-Ebene fertig machen, dann eigentliche Programmlogik. Das ist schön Design-By-Intention, alle Use-Cases sind zwangsläufig schon definiert bevor die Programmlogik überhaupt angefasst wird. Zudem, so der Gedanke, liegen die nervigen Dingen (GUI, Presenterlogik) am Anfang des Projektes, wenn die Euphorie noch am größten ist.

Nun, ich hatte verdrängt, was für ein unglaublicher Mindfuck es ist, ne GUI mit Java zu erstellen. Das ist einfach zum Haare raufen.
Ich habe jetzt Stunden um Stunden damit verbracht, mich mit verschiedensten Layout Managern herumzuschlagen, und es funktioniert einfach nichts.
Der Grouplayout Mananger wirkt da noch am vernünftigsten. Trotzdem sind die Ergebnisse nicht so, wie ich mir das vorstelle. Ich habe auch mit dem Grouplayout nicht das Gefühl, wirklich Kontrolle über das Layout zu haben.
Nachdem zwei Komponenten, die eigentlich horizontal parallel, vertikal sequentiell angeordnet sein sollten, tatsächlich doch schön horizontal hintereinander gereiht dargestellt wurden, habe ich wieder aufgehört (weil WTF?).
In Delphi hätte ich wahrscheinlich die ganze GUI innerhalb von 30 Minuten zusammengeklickt. Stattdessen habe ich auch nach 10 Stunden oder mehr nicht mal eine einzige Eingabemaske fertig.
Ich bin sooo kurz davor das ganze Projekt zu kippen :(


Konkrete Fragen:
Aber vielleicht gibt es hier ja Leute, die etwas Erfahrung mit AWT/Swing Layout Manager, bzw. GUI-Design unter Java im Allgemeinen, haben :)

Dazu erstmal ein paar konkrete Fragen zum GroupLayout:

- wie kann man die horizontale Größe einer Komponente bestimmen? mit .add(Component, intMin, intPrefered, intMax) (also zb. .add(myEdit, 100, 100, 100)) hat das bei mir nicht geklappt.
- muss man einen neuen GroupLayout für jeden Container (Frames, Panels) erstellen?
- unter welchen Umständen führt der folgende Code NICHT zu der gewünschten vertikalen Anordnung:
Code:
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup()
                                           .add(myLabel)
                                           .add(myEdit)
);
groupLayout.setVerticalGroup(groupLayout.createSequentialGroup()
                                           .add(myLabel)
                                           .add(myEdit)
);
Ohne Containerschachtelung klappt es:
Code:
window = new Frame();
groupLayout = new GroupLayout(window);
myLabel = new Label();
myEdit = new Edit();
//dann der Code von oben
Mit ewtas Schachtelung nicht mehr:
Code:
//Komponenten und Container erzeugen
window new Frame();
groupLayout = new GroupLayout(window);
page = new CardLayout();
panelSwitch = new Panel(page);
panelPage1 = new Panel();
groupPage1 = new GroupLayout(panelPage1);
myLabel = new Label();
myEdit = new Edit();

//Komponenten page1 zuordnen
groupPage1.setHorizontalGroup(groupPage1.createParallelGroup()
                                           .add(myLabel)
                                           .add(myEdit)
);
groupPage1.setVerticalGroup(groupPage1.createSequentialGroup()
                                           .add(myLabel)
                                           .add(myEdit)
);

//page1 in dem Switch-Panel hinzufügen
panelSwitch.addComponent(panelPage1);

//Switch-Panel dem Frame zuordnen
//im window sollen alle Container vertikal angeordnet sein
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup()
                                           .add(panelSwitch)
);
groupLayout.setVerticalGroup(groupLayout.createSequentialGroup()
                                           .add(panelSwitch)
);

Was ich eigentlich erreichen will:
Leider ist meine GUI etwas komplexer als 4 (labled) Edits und zwei Buttons oder so.
Es handelt sich um eine Maske zur Eingabe von Daten. Das Haupfenster hat drei Teile, untereinander angeordnet:
1. Das Panel, das die eigentlichen Komponenten zur Eingabe enthält. Da es zu viele sind, um sie gleichzeitig anzuzeigen, möchte ich das mit mehreren "Seiten" über nen CardLayout machen.
2. Eine Textausgabe zum Anzeigen von Hinweisen oder anderen Nachrichten an den User.
3. Eine Buttonleiste zur Navigation (Abbrechen, Vorherige/Nächste Seite, Speichern)

Die Eingabemaske enthält mehrere Label+Edit Kombinationen, die vertikal angeordnet sein sollten.
Zudem:
- Titel-Label + mehrere Reihen von Checkboxen, wobei das Titel-Label linksbündig über den Checkboxreihen stehen sollte
- Titel-Label + Edit und Button; Edit und Button nebeneinander, Titel-Label linksbündig über dem Edit
- eine TextArea zum Preview der eingefügten Texte, plus undo und redo Buttons; die Buttons sollten vertikal zueinander stehen, beide rechts neben der TextArea

An Responsive Design denke ich gar nicht erst ;)

Sherlock 18. Jan 2017 13:16

AW: GUI mit Java - Tipps?
 
"Sorry Kiddo, that's Java in a nutshell."

Du hast mein Beileid, andererseits hast Du Dir die Sprache ja selbst ausgesucht.

Sherlock

a.def 18. Jan 2017 14:17

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von Sherlock (Beitrag 1359171)
"Sorry Kiddo, that's Java in a nutshell."

Du hast mein Beileid, andererseits hast Du Dir die Sprache ja selbst ausgesucht.

Sherlock

Werf Java, trotz Intellij, am besten über Bord und benutz die IDE und die Programmiersprache, die wirklich taugen: Delphi IDE und Delphi :stupid:
Ich musste mich während der Ausbildung auch Jahre lang mit Java rumschlagen und weiß wovon du redest.

Du könntest ja im absoluten Notfall NetBeans benutzen aber die IDE generiert meiner Meinung nach hässlichen Code im Editor.

TiGü 18. Jan 2017 14:30

AW: GUI mit Java - Tipps?
 
Warum nicht Oberfläche in Delphi und die eigentliche Programmlogik in Java?

Rabenrecht 18. Jan 2017 14:53

AW: GUI mit Java - Tipps?
 
Das geht? Wie würde man sowas den angehen?


@ a.def und Sherlock
Java an sich in ganz in Ordnung. Dass GUI-Design nicht die Stärke ist, war mir auch vorher klar. Aber muss doch irgendwie möglich sein, ne Oberfläche mit AWT oder Swing oder so zu erstellen.
Insgesamt würde ich für dieses Projekt schon ganz gern bei Java und IntelliJ bleiben, auch damit es sich nicht so anfühlt wie Arbeit ;)

TiGü 18. Jan 2017 15:17

AW: GUI mit Java - Tipps?
 
Bin mit Java nicht so vertraut, eher Delphi in Zusammenspiel mit C++ und C#, aber kann man da in Java auch COM-Interface-Objekte über DLL-Grenzen hinweg erstellen und weitergeben?

bra 18. Jan 2017 15:37

AW: GUI mit Java - Tipps?
 
Ich habe vor vielen Jahren mal bissl mit Java programmiert und ich würde die empfehlen, irgendein Framework zum Erzeugen der GUI zu nutzen. Die GUI per Code zusammenzubasteln ist purer Brainfuck.

Ich weiss leider nicht mehr, was ich damals genutzt habe, aber vermutlich gibt es das inzwischen eh nicht mehr.

a.def 18. Jan 2017 15:52

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von bra (Beitrag 1359186)
Ich habe vor vielen Jahren mal bissl mit Java programmiert und ich würde die empfehlen, irgendein Framework zum Erzeugen der GUI zu nutzen. Die GUI per Code zusammenzubasteln ist purer Brainfuck.

Ich weiss leider nicht mehr, was ich damals genutzt habe, aber vermutlich gibt es das inzwischen eh nicht mehr.

Oder man benutzt als IDE einfach NetBeans.

mjustin 18. Jan 2017 18:06

AW: GUI mit Java - Tipps?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von a.def (Beitrag 1359188)
Oder man benutzt als IDE einfach NetBeans.

Genau. NetBeans 8.2 enthält einen brauchbaren visuellen Editor für Swing Oberflächen. Funktioniert prima, mit interaktiver Vorschau. Auch in Maven Projekten, eigene oder Drittanwender JavaBeans können benutzt werden.

Ein besonderes Framework oder zusätzliche IDE Plugins habe ich für Swing Oberflächen nie benötigt, mit Borland JBuilder und NetBeans geht es auch.

Siehe Screenshot im Anhang - das Erstellen des Layouts ging recht flott. Der generierte Code mag des einen oder anderen Auge strapazieren, aber da er ausgeblendet wird ist er genauso wenig störend wie der einer DFM Datei (über die man nicht sagen kann, dass sie einfach mit Grep durchsuchbar wäre, by the way).

BrightAngel 18. Jan 2017 21:00

AW: GUI mit Java - Tipps?
 
Was ich einfach auch mal in den Raum werfen möchte:

Qt und C++ ist auch "mal was anderes" als Delphi.

Wenn du wirklich bei Java bleibst, musst du nicht bei Swing und AWT bleiben. Seit Java 8 ist ja auch JavaFx8 bei Auslieferung mit an Board (gut man muss evtl noch die Zugriffsrechte anpassen; zumindest war das bei mir unter Eclipse der Fall; ja, ich tue mir das an :oops:). JavaFx hat ein paar schöne Eigenschaften, die ich persönlich Swing zum Beispiel vorziehe. Das Schöne: Wenn man ohnehin Java 8 als untere Versionsgrenze hat, kann man auch gleich "moderne" Dinge wie Lambdas bei EventListenern verwenden... :-D
Klar, GUI in Code direkt zu schreiben ist manchmal schon nervig, aber manchmal zwingt man sich dann wenigstens an dieser Stelle gleich früh generisch zu werden und in der View zu Abstrahieren und zu Gruppieren :wink:

Brighty

Benedikt Magnus 18. Jan 2017 21:07

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von BrightAngel (Beitrag 1359209)
Klar, GUI in Code direkt zu schreiben ist manchmal schon nervig, aber manchmal zwingt man sich dann wenigstens an dieser Stelle gleich früh generisch zu werden und in der View zu Abstrahieren und zu Gruppieren :wink:

Könntest du das vielleicht etwas genauer ausführen bitte?

BrightAngel 18. Jan 2017 21:17

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von Benedikt Magnus (Beitrag 1359210)
Zitat:

Zitat von BrightAngel (Beitrag 1359209)
Klar, GUI in Code direkt zu schreiben ist manchmal schon nervig, aber manchmal zwingt man sich dann wenigstens an dieser Stelle gleich früh generisch zu werden und in der View zu Abstrahieren und zu Gruppieren :wink:

Könntest du das vielleicht etwas genauer ausführen bitte?

Naja, in einem Gui-Klicki-Bunti Editor Komponenten drauf draggen kann jeder. Das perfide: Grade bei komplexeren Oberflächen machen manche dann einfach händisch ein paar Buttons untereinander, anstelle mal kurz ne Regelmäßigkeit zu finden und das halt schön baumartig in ner Objekthierarchie auszuprogrammieren. Grade, weil es ja komplexer ist, wird es durch das Einführen von generischem Zugriff unter Umständen einfacher auf "Gruppen" von Oberflächenelementen zuzugreifen.
Klar, es gibt auch das Argument dagegen, dass dann ja die Eigenschaftenwerte wieder IM Code stehen und nicht außerhalb, aber manchmal kann man auch hier wieder Regelmäßigkeiten finden und die zum Beispiel in eine Config auslagern, die dann vielleicht weniger Einträge enthält, weil sie Redundanz reduziert.

Zudem bietet JavaFx zum Beispiel CSS (ja, genau; das aus dem Browser) an, das man bei Bedarf laden kann, da kann man schon automatisiert mit Hausmitteln einiges auslagern.

Ist aber jetzt wirklich eher philosophisch :wink: Nur meine Meinung zum Thema :stupid:

Brighty

Rollo62 19. Jan 2017 06:27

AW: GUI mit Java - Tipps?
 
@BrightAngel

Hast du Erfahrung mit QT und Java für CrossPlatform ?

Mich würde interessieren wie der gsnze Workflow mit Zertifikaten, Debugging, etc. abläuft.
Ist das in QT, Netbeans, Eclipse schön sauber integriert oder ist das Kommandozeilen-Gefummel ?

Der integrierte Workflow ist eines der Hauptargumente für Firemonkey für mich.
Wahrscheinlich wäre es besser Alles per CI Server zu machen, aber da konfiguriert man sich bestimmt auch einen Wolf bis Android/Mac richtig Laufen.

Das sollte doch bei Java und QT eigentlich schon immer plattformübergreifend gelöst worden sein, und womöglich weiter entwickelt als bei Delphi.

Rollo

bra 19. Jan 2017 10:33

AW: GUI mit Java - Tipps?
 
Das Problem ist aber, wenn man am Zusammenbasteln der GUI 90% der Zeit verbringt, wird ein Projekt irgendwann unwirtschaftlich und auch nervtötend.
Selbst mit Delphi u.a. verbringt man immer noch viel Zeit mit Anpassungen der GUI, aber der Hauptteil sollte doch eigentlich die Funktionalität sein, oder?

mjustin 19. Jan 2017 11:46

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von bra (Beitrag 1359186)
Ich habe vor vielen Jahren mal bissl mit Java programmiert und ich würde die empfehlen, irgendein Framework zum Erzeugen der GUI zu nutzen. Die GUI per Code zusammenzubasteln ist purer Brainfuck.

Ich weiss leider nicht mehr, was ich damals genutzt habe, aber vermutlich gibt es das inzwischen eh nicht mehr.

JGoodies Forms eventuell? Es war früher kommerziell wimre und ist nun Freeware:

http://www.jgoodies.com/freeware/libraries/forms/

BrightAngel 19. Jan 2017 14:57

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von Rollo62 (Beitrag 1359217)
Hast du Erfahrung mit QT und Java für CrossPlatform ?

Ich bin kein Qt Fachmann, aber hatte schon damit für ein Computergraphikprojekt zu tun. Auch die haben zum Beispiel mit Signal/Slots auf Programmebene ihre eigenen Verhaltensweisen und Quirks über die man halt anfangs stolpert (zumindest bin ich das schon bei Codeausführungsreihenfolge). Ich hab damals GUI programmatisch erzeugt (weil 3D und so und da schlicht nicht viele Einzelelemente zu platzieren waren) und war machbar. Die haben aber auch nen Editor. Wie gut der in der Benutzung ist, kann ich leider nicht aus eigener Erfahrung sagen.

Java IST das Paradebeispiel einer Sprache, die in der Runtime versucht hat dadurch Platformunabhängigkeit zu erreichen, indem sie ihre eigenen Apis so definiert, dass diese komplett alles zur Verfügung stellen. Nur das Nötigste wird über die so genannte JNI (Java Native Interface) abgewickelt (im Prinzip sind das nur normale dlls, die bestimmte Dinge exportieren müssen, damit die JVM diese benutzen kann). Man kann auch selbst solche JNI Bibliotheken benutzen, wenn man Platformunterschiede feststellt, die nicht von der JVM standardmäßig abgedeckt sind und für die Platform dann spezifische native Bibliotheken anbieten, die dann das selbe Bibiliotheksinterface implementieren. Android kannst du ja auch mit der Sprache Java programmieren, hast dann aber andere UI Klassen und so weiter.

Zitat:

Zitat von Rollo62 (Beitrag 1359217)
Mich würde interessieren wie der gsnze Workflow mit Zertifikaten, Debugging, etc. abläuft.
Ist das in QT, Netbeans, Eclipse schön sauber integriert oder ist das Kommandozeilen-Gefummel ?

Der integrierte Workflow ist eines der Hauptargumente für Firemonkey für mich.
Wahrscheinlich wäre es besser Alles per CI Server zu machen, aber da konfiguriert man sich bestimmt auch einen Wolf bis Android/Mac richtig Laufen.

Das sollte doch bei Java und QT eigentlich schon immer plattformübergreifend gelöst worden sein, und womöglich weiter entwickelt als bei Delphi.

Rollo

Debugging ist in Java (Eclipse, Netbeans) wie bei Delphi auch ein Knopfdruck. In Eclipse finde ich schön, dass es verschiedene Perspektiven gibt. Beim Erreichen eines Breakpoints (der sich auch einfach setzen lässt wie in Delphi auch) zum Beispiel schlägt es vor die Debugging Perspektive zu öffnen, und auch SingleStepping (mit den Geschmacksrichtungen nächste Instruktion der Funktion, springe IN den Funktionsaufruf, kehre einen Stackframe nach oben zurück) und so tut. Man kann auch recht bequem ein jar mit den kompilierten class Files erzeugen. Signieren hab ich noch nicht so exzessiv gemacht, geht aber bestimmt auch (Eclipse ist ein modulares MONSTER). Git und Svn ist auch anschaltbar.

Brighty

BrightAngel 19. Jan 2017 15:02

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von bra (Beitrag 1359234)
Das Problem ist aber, wenn man am Zusammenbasteln der GUI 90% der Zeit verbringt, wird ein Projekt irgendwann unwirtschaftlich und auch nervtötend.
Selbst mit Delphi u.a. verbringt man immer noch viel Zeit mit Anpassungen der GUI, aber der Hauptteil sollte doch eigentlich die Funktionalität sein, oder?

Stimmt; aber da kann man ja versuchen ein Equilibrium zu finden. Das ist ja vielleicht auch die Kunst... 8-)
Es gibt ja auch Leute, die sagen: Ach "sch*** auf Reusable Code... Am Ende brauch ich doch wieder was leicht anderes und entwickle ohnehin von vorne wieder". Ich finde das ist alles eine Frage der Wohldefiniertheit: Ich bin davon überzeugt, dass je mehr Erfahrung man über die Jahre sammelt, man auch immer Besser gemeinsame Probleme findet. Ich sitze so oft - egal in welcher Sprache - am Ende eines Projekts vor dem Code und denke: Das nächste Mal würde ich das anders machen und gleich so anfangen...

Brighty

Rollo62 20. Jan 2017 11:07

AW: GUI mit Java - Tipps?
 
Hallo Brighty,

dankesehr für die Erklärungen.

Ich meinte eigentlich auch mehr den Workflow für die mobilen Plafformen,
mit Zertifikatseinbindung, Provisioning, etc. für den Upload in die Stores.

Da finde ich das Delphi uns sehr gut dabei unterstützt, ich frage mich ob das bei
anderen Platformen auch so ist ?
Oder vielleicht sogar besser :shock:

Rollo

BrightAngel 20. Jan 2017 15:39

AW: GUI mit Java - Tipps?
 
Also mit Stores und so kenne ich mich nicht im Detail aus; hatte damit bisher zu wenig mit Cross Develop für mobil zu tun :oops:

IOS und Java kann ich dir leider nicht empfehlen, weil ich damit noch nicht in Kontakt war (Swift und so...)

Ich hatte mir für Androidentwicklung dann tatsächlich das Android Studio besorgt und das hatte bisher gereicht und mit dem SDK habe ich jetzt bisher nichts vermisst und im Zweifel ging es immer auch manuell über die Konsole... :twisted:

Tut mir leid, dass ich dir in genau dieser Richtung nicht weiterhelfen kann...! :(
Brighty

Rollo62 20. Jan 2017 23:56

AW: GUI mit Java - Tipps?
 
Kein Problem, ich bin ja mit Delphi IDE ganz zufrieden.

Die Probleme liegen auch eher bei den Stores, etc. wo es manchmal zig Wege gibt einen
Api Key anzulegen, und man nie so genau weiss obs gerade richtig ist.

Da würde ich mir ein Tool wünschen das einfach nur
einen Knopf hat: "Lade die App mal in den Store hoch"

Und mich dann notfalls mal nach Passort o.ä. fragt.

Das scheint aber nur ein Wunschdenken zu sein, weil Apple/Google auch ständig
an deren Stores und Services herumfummeln.

Rollo

Rabenrecht 24. Jan 2017 12:04

AW: GUI mit Java - Tipps?
 
Zitat:

Zitat von a.def (Beitrag 1359188)
Oder man benutzt als IDE einfach NetBeans.

Dies mag wie eine sehr offensichtliche Lösung für mein im OP geschildertes Problem erscheinen, aber offensichtlich habe ich diesen Wink mit dem Zaunpfahl gebraucht. Danke also dafür, dass du mich mit der Nase auf NetBeans gestoßen hast :)

Damit habe ich alle meine Frames und Dialogs etc. eben schnell zusammengeklickt und den generierten Code in meine Intellij Projekt kopiert. Funktioniert alles wunderbar :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz