Einleitung/Rant:
Vor ca. 2 Wochen habe ich ein privates Projekt angefangen (weil ich bei der Arbeit ja nicht schon genug programmiere... ). 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
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:
Ohne Containerschachtelung klappt es:
Mit ewtas Schachtelung nicht mehr:
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
Vor ca. 2 Wochen habe ich ein privates Projekt angefangen (weil ich bei der Arbeit ja nicht schon genug programmiere... ). 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
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)
);
Code:
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