Layout, aber welches?

Status
Nicht offen für weitere Antworten.

eddy

Aktives Mitglied
Guten Morgen,
wir haben gestern in der Uni mit Layout angefangen.
Allerdings finde ich es nicht vorteilhaft das allen Buttons,
Felder etc. feste Positionen bekommen.

Welches Layout ist denn das meist verwendete :rtfm: und
welches ist denn das beste zum entwickeln?

Grüße und schon mal ein schönes Wochenende! 😉

Phil
 
Hallo,

also ich finde das GridBagLayout nicht schlecht. Ich verwende es in meinem derzeitigen Projekt merhmals. Ist zwar etwas kompliziert aber dafür flexibler als all die anderen Layoutmanager.

XFlipX

Ps.: Wenn du den Dreh raus hast, ist auch das GridBagLayout leicht zu handeln.
 
Also "das Beste" gibt es wohl mal ganz und gar nicht 😛 ...denn es kommt immer drauf an, was du erreichen willst.
Am einfachsten zum Testen ist wohl das BorderLayout, dass alle Container von vorn herein haben und man durch Ortsangaben wie CENTER, NORTH, SOUTH immerhin beim programmieren schonmal weiß, was wo hinkommt.

Natürlich genügt das für die meisten GUIs nicht, daher gibt es noch mehr LayoutManager. Welcher im konkreten Fall der Beste ist lässt sich erst sagen, wenn man den konkreten Fall kennt 😉

Also anschauen und zumindest grob verstehen, was die einzelnen Manager machen, sollte man bei allen. Mit dem GridBagLayout, da stimme ich zu, kann man am meisten Einfluss nehmen. Aber ich habe zumindest immernoch Probleme hier und da damit, weil es nicht einfach ist 😉
 
Mächtig und einfach ist das MigLayout 🙂 Ist aber noch ein externes Jar.

MiG Layout Java Layout Manager for Swing and SWT

Java:
 JPanel panel = new JPanel(new MigLayout());

    panel.add(firstNameLabel);
    panel.add(firstNameTextField);
    panel.add(lastNameLabel,       "gap unrelated");
    panel.add(lastNameTextField,   "wrap");
    panel.add(addressLabel);
    panel.add(addressTextField,    "span, grow");

Form.png
 
Ja, das GridBagLayout ... Totally Gridbag – madbean 😉

Ich finde, meistens kommt man mit BorderLayout und GridLayout schon hin. Es gibt eine Sache, die damit nicht schön geht, und für die ich GridBagLayout verwende(n würde), nämlich sowas wie
Code:
someLabel         TextField
someOtherLabel    TextField
someVeryLongLabel TextField
shortLabel        TextField
button            TextField
Ansonsten gibt's viele Alternativen wie TableLaoyut oder PercentLayout, aber die brauchen eben immer externe Bibliotheken...
 
Hi,

also meiner Meinung ist das GridbagLayout das "einfachste". Die Anführungszeichen deshalb, weil es sicher kompliziert zu erlernen ist, aber wenn man´s mal verinnerlicht hat, ist es sehr leicht jede Art von GUI zu entwickeln.

Übung macht den Meister 😀
 
Zur Verwendung...
Es soll halt möglich sein die Maske auf jede erdenkliche Größe anzupassen.
Wenn einer nur min. eine 1024x768 Auflösung hat soll der Bildschirm ausgefüllt sein,
genauso soll das Programm den ganzen Bildschirm ausfüllen wenn dieser eine Full HD Auflösung hat.

Dabei soll aber nicht alles zu gleichen fällen wachsen, sondern halt nur bestimmte Bereiche oder Felder, Buttons soll dabei Ihrer größe zb behalten.

So ungefähr verstanden was ich meine?
Und hat einer vllt ein beispiel dafür?

Lg
 
Würde ich wohl mit dem TableLayout machen (bin einfach kein Freund des GridbagLayouts). Da kannst du festlegen ob Spalten/Reihen eine feste Größe haben sollen, oder ob sich die Größe in Abhängigkeit der Fenstergröße mitberändern soll.

EDIT: Hier ein Tutorial in dem die Funktionsweise klar wird

Part1
Part2
 
Zuletzt bearbeitet:
Also GridBagLayout würde ich nicht nehmen. Dazu benötigt man viel zu viel (und noch mal viel mehr) Code und wenn ein anderer Mitarbeiter mal was an der GUI anpassen soll, dann braucht der erst mal 1-2 Monate Schulung dafür, in der Hoffnung es dann kapiert zu haben...

Bei Miglayout hast du echt den Vorteil, dass alles über leicht verständliche Strings klar lesbar ist, was dieser Eintrag jetzt macht (z.B. span, growx, growy, wrap, left, top). Du kannst auch Global bestimmte Sachen von vordefinieren, sodass du die die Strings dahinter sogar ganz sparen kannst. Kein Spalten&Reihenzählen, keine Koordinaten, leichte Anpassung.

noch ein Beispiel:

Java:
JPanel p = new JPanel(new MigLayout("","[grow][]","[][][][grow]"));
p.add(new JButton("Klick mich1"),"wrap");
p.add(new JTextField("Klick mich2"),"growx");
p.add(new JButton("Klick mich3"),"wrap");
p.add(new JTextField("Klick mich3",20),"top");
p.add(new JButton("Klick mich4"),"wrap");
p.add(new JScrollPane(new JTextArea("Das ist eine TextArea")),"span 2, grow");

Wie man leicht lesen kann, wächst das Textfeld "Klick mich2" horizontal mit, "Klick mich3" tut das nicht und die Textarea spannt sich über beide Spalten und wächst in beide Richtungen.

attachment.php
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Zurück
Oben