Java LayoutManager Aufgabenstellung?
Guten Abend!
Ich habe folgende Aufgabenstellung erhalten, und komme gerade an einem Punkt nicht weiter, und möchte hiermit um Hilfe ersuchen.
Nun, das Problem bei mir ist, dass die Anordnung von den Labels nicht richtig ist. Sprich ich möchte das Arbeitgeber links im oberen Panel steht, wie auf der Aufgabenstellung und eben halt, dass auch die anderen Labels daneben stehen, das gleiche eben auch im unteren grünen Panel, dass alles schön untereinander steht, also die Labels und daneben die Textfields.
Das ist mein derzeitiger Code:
https://pastebin.com/zvz2B09M (Musste ich hier hochladen, weil der Text sonst zu lang wäre)
Beim Rest kenne ich mich aus, heißt wie man den Buttons eine Funktion zuweist. Nur ich hänge gerade an diesem Punkt fest, wie oben geschildert.
Ich hoffe, dass mir jemand damit helfen kann, es würde mich wirklich sehr freuen, und mir weiterhelfen. Liebe Grüße.
1 Antwort
Du kannst ein GridBagLayout verwenden.
Das Prinzip ist dabei Folgendes: Für jede Zelle wird ein GridBagConstraint definiert, welches Gewichtung, Innenabstand, etc. festlegt. Für den gesamten Prozess kannst du ein Objekt dieses Typs hin und herreichen.
JPanel grid = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.ipadx = 10;
constraints.ipady = 10;
constraints.gridx = 0;
constraints.gridy = 0;
JLabel lblDate = new JLabel("Datum:");
lblDate.setFont(new Font("Arial", Font.BOLD, 15));
grid.add(lblDate, constraints);
constraints.gridx = 1;
JTextField txtDate = new JTextField();
grid.add(txtDate, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
JLabel lblDestination = new JLabel("Reiseziel:");
lblDestination.setFont(new Font("Arial", Font.BOLD, 15));
grid.add(lblDestination, constraints);
// etc. ...
In diesem Beispiel siehst du, dass ich zuerst einen Innenabstand definiere (ipadx / ipady). Das mache ich am Anfang, da er für alle Zellen gelten soll.
Im Anschluss wird jede Komponente nach und nach dem Layout zugefügt (es handelt sich um ein dynamisches Grid, die Anzahl an Spalten/Zeilen entscheidet sich daran, wie viele Komponenten du ihm zufügst). Um die Position im Layout vorzugeben, werden lediglich die Werte von gridx und gridy verändert.
Auf dieser Seite findest du weitere Informationen zum Layout selbst sowie verschiedene Eigenschaften von GridBagConstraints, die du ebenso noch nutzen kannst.
Wurde euch diese Vorgabe mündlich gemacht? Im Text steht ja nichts dazu und ehrlich gesagt ist das FlowLayout dafür nun nicht die allerbeste Wahl.
Du könntest dem center-Panel einen Border verpassen, um den äußeren horizontalen Abstand zu setzen:
int margin = getSize().width / 100 * 20;
center.setBorder(BorderFactory.createEmptyBorder(0, margin, 0, margin));
Jede Zeile wiederum (Label + Textfeld) wandert in ein eigenes Panel, welches die übrige Frame-Breite bekommt.
int rowWidth = (getSize().width - 2 * margin);
Diese Art Layoutberechnung ist allerdings nicht sonderlich schön.
Ja sie wurde mündlich gemacht, ich danke dir.
Ich danke dir für deine Bemühungen, jedoch muss ich das BorderLayout, FlowLayout anwenden um das ganze zu lösen. Ich glaube das müsste entweder mit einem Zeilenumbruch funktionieren, was jedoch bislang nicht funktioniert hat, habe außerdem auch versuch eine neue Dimension zu machen, welche genau so breit wie das Panel ist, sodass die anderen Label in die nächste Zeile automatisch rutschen, hat jedoch leider auch nicht funktioniert.