![]() |
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:
Ohne Containerschachtelung klappt es:
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup()
.add(myLabel) .add(myEdit) ); groupLayout.setVerticalGroup(groupLayout.createSequentialGroup() .add(myLabel) .add(myEdit) );
Code:
Mit ewtas Schachtelung nicht mehr:
window = new Frame();
groupLayout = new GroupLayout(window); myLabel = new Label(); myEdit = new Edit(); //dann der Code von oben
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 ;) |
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 |
AW: GUI mit Java - Tipps?
Zitat:
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. |
AW: GUI mit Java - Tipps?
Warum nicht Oberfläche in Delphi und die eigentliche Programmlogik in Java?
|
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 ;) |
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?
|
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. |
AW: GUI mit Java - Tipps?
Zitat:
|
AW: GUI mit Java - Tipps?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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). |
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 |
AW: GUI mit Java - Tipps?
Zitat:
|
AW: GUI mit Java - Tipps?
Zitat:
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 |
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 |
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? |
AW: GUI mit Java - Tipps?
Zitat:
![]() ![]() |
AW: GUI mit Java - Tipps?
Zitat:
![]() 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:
Brighty |
AW: GUI mit Java - Tipps?
Zitat:
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 |
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 |
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 ![]() Tut mir leid, dass ich dir in genau dieser Richtung nicht weiterhelfen kann...! :( Brighty |
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 |
AW: GUI mit Java - Tipps?
Zitat:
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