hi, Ich habe ein Problem mit dem Layout. Ich erzeuge dynamisch verschachtelte Komponenten. Im wesentlichen die zwei: einmal eine Group-Komponente (abgeleitet von Panel), das beliebig viele weitere Komponenten enthalten kann (auch weitere Groups). Eine Group enthält eine optionale Überschrift, so wie ein Icon. Group hat ein Gridlayout. dann gibt es ein Element (auch abgeleitet von Panel), das enthält Eingabefelder und Buttons und ist einzeilig. (Gridbag-Layout) Als Wurzelelement gibt es immer eine Group, die weitere Groups oder direkt Elemente enthält. also: group group element element group element element element element da tritt auch schon das Problem auf. Das Gridlayout eines Groupknoten macht alle Unterknoten gleich hoch, unabhängig davon, wie viele ELmente in diesem Knoten enthalten sind. Was ich will ist natürlich, dass die Eingabefelder und Buttons alle gleich groß sind. Sprich die Größe soll in die andere Richtung propagiert werden, also von unten nach oben, anstatt von oben nach unten. Insgesamt soll trotzdem der gesamte zur Verfügung stehende Platz ausnutzt werden. Jemand eine Idee, wie man das hinbekommt? ein anderer LayouManager? wenn ja welcher
> einmal eine Group-Komponente (abgeleitet von Panel), Hm.. warum das denn? reicht dir Panel nicht? > Eine Group enthält eine optionale Überschrift, so wie ein Icon. > Group hat ein Gridlayout. Outsch... > dann gibt es ein Element (auch abgeleitet von Panel), das enthält > Eingabefelder und Buttons und ist einzeilig. (Gridbag-Layout) s.o. wofür die Ableitung? > da tritt auch schon das Problem auf. > Das Gridlayout eines Groupknoten macht alle Unterknoten gleich hoch, Wohl nicht die API gelesen ;) genau das macht ein Gridlayout, alle Elemente im Container sind gleich groß. > Jemand eine Idee, wie man das hinbekommt? Nicht so viel Ableiten ;) > ein anderer LayouManager? wenn ja welcher BorderLayout. North = Label mit Text/Icon Center = Panel mit Box(Layout)? oder so Vielleicht ist "GroupLayout" auch das was du suchst? Für Automatisches Layout gibt es auch noch Springlayout: http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html
Läubi .. schrieb: >> einmal eine Group-Komponente (abgeleitet von Panel), > Hm.. warum das denn? reicht dir Panel nicht? hat noch spezielle Methoden und Eigenschaften. > >> Eine Group enthält eine optionale Überschrift, so wie ein Icon. >> Group hat ein Gridlayout. > Outsch... ??? > >> dann gibt es ein Element (auch abgeleitet von Panel), das enthält >> Eingabefelder und Buttons und ist einzeilig. (Gridbag-Layout) > s.o. wofür die Ableitung? s.o. hat noch spezielle Methoden und Eigenschaften. > >> da tritt auch schon das Problem auf. >> Das Gridlayout eines Groupknoten macht alle Unterknoten gleich hoch, > Wohl nicht die API gelesen ;) genau das macht ein Gridlayout, alle > Elemente im Container sind gleich groß. > >> Jemand eine Idee, wie man das hinbekommt? > Nicht so viel Ableiten ;) warum? wenn ich ein Panel um eigene Construktoren/Eigenschaften/Methoden erweitern will, sollte doch Vererbung das Mittel der Wahl sein. > >> ein anderer LayouManager? wenn ja welcher > BorderLayout. > North = Label mit Text/Icon > Center = Panel mit Box(Layout)? oder so Ja gut, das Panel selbst ist borderlayout. das Center, was die anderen Componenten enthält ist Gridlayout, > > Vielleicht ist "GroupLayout" auch das was du suchst? Für Automatisches > Layout gibt es auch noch Springlayout: > http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html Bei Springlayout steht immer, das das eher für Guibuilder gedacht ist und ansonsten extrem viel Handarbeit. Das Hauptproblem, was ich sehe ist, dass eigentlich 2 Passes nötig sind. Einer von unten nach oben, wo die Elemente alle gleich groß sind und sich die Größen der Elternelemente dadurch ergeben. und dann eine Skalierung des ganzen auf die volle Fenster/Panel-Fläche.
Ich denke es sollen eben nicht alle Elemente gleich groß sein... Wenn alles gleich groß sein soll dann nimm GridLayout, nutze eine Unterliegende Datenstruktur welche deine Hierarchie repräsentiert und nutze dann ein Panel mit GridLayout was aus dieser Generiert wird. Vlad Tepesch schrieb: > hat noch spezielle Methoden und Eigenschaften. Ein Panel ist ein GUI Element ich hab irgendwie das Gefühl das du da Dinge reinquetscht die eher ins Datenmodell gehören (s.o.) Vlad Tepesch schrieb: > Bei Springlayout steht immer, das das eher für Guibuilder gedacht ist > und ansonsten extrem viel Handarbeit. Du schriebst doch das das Layout automatisch erzeugt wird...
Läubi .. schrieb: > Ich denke es sollen eben nicht alle Elemente gleich groß sein... Die Schaltflächen sollen alle gleich Groß sein (bzw eigentlich nur gleich hoch), Die Gruppen sollen sich der Anzahl der Elemente anpassen. Insgesammt soll das ganze aber so skaliert sein, dass der ganze zur verfügung stehende Platz eingenommen wird. > Wenn alles gleich groß sein soll dann nimm GridLayout, nutze eine > Unterliegende Datenstruktur welche deine Hierarchie repräsentiert und > nutze dann ein Panel mit GridLayout was aus dieser Generiert wird Das ist nicht so einfach möglich, da die gruppen durchaus unterschiedliche Spaltenanzahlen haben können. Ich hol mal etwas weiter aus: Anwendungszweck ist eine einfache Anwendung zum Zählen und Protokollieren von Fehlern in Feldtests, die frei konfigurierbare Problemfälle darstellen soll. (für ein Tablet oder Convertible) Je nach Zielanzeigegerät, Testcases oder Vorlieben (Hochformat/Querformat) kann man das ganz leicht per XML-Anpassen. Siehe Screenshot Läubi .. schrieb: > Ein Panel ist ein GUI Element ich hab irgendwie das Gefühl das du da > Dinge reinquetscht die eher ins Datenmodell gehören (s.o.) nö, das datenmodell ist schon getrennt. Trotzdem managet die Klasse halt die Erzeugung und Auswertung der Kindelemente. Läubi .. schrieb: > Du schriebst doch das das Layout automatisch erzeugt wird... in dem Sinne, dass auf Basis einer anderen Datenstruktur dynamisch die Elemente erzeugt werden. Dies aber von Hand im Code.
Vlad Tepesch schrieb: > Das ist nicht so einfach möglich, Wenn es einfach wäre könnte es ja jeder ;) Was soll den jetzt gleich groß sein? Zeilen gleich hoch?
Wenn du beim Aufbauen der GUI schon weißt wieviele Zeile jede Group hast kannst du ein GridBagLayout nehmen. Ein Panel einer Group bekommt dann entsprechend viele Zeilen im Grid zugewiesen (z.B. Testfälle A: 3 und Fehlverhalten: 4).
Läubi .. schrieb: > Was soll den jetzt gleich groß sein? Zeilen gleich hoch? Ja, die Eingabezeilen sollen alle gleich hoch sein. Achim schrieb: > Wenn du beim Aufbauen der GUI schon weißt wieviele Zeile jede Group hast > kannst du ein GridBagLayout nehmen. Ein Panel einer Group bekommt dann > entsprechend viele Zeilen im Grid zugewiesen (z.B. Testfälle A: 3 und > Fehlverhalten: 4). das wäre eine Möglichkeit, aber dann müssten Titelzeilen genauso hoch sein, wie eine Eingabezeile. Das selbe Problem entsteht, wenn ich jede Zeile in das Top-Panel werfen würde, ohne sie in Subpanel zu packen edit: das scheint aber immer noch besser zu sein, als der aktuelle Zustand ;)
Vlad Tepesch schrieb: > das wäre eine Möglichkeit, aber dann müssten Titelzeilen genauso hoch > sein, wie eine Eingabezeile. Du kannst auch mit einer MateBorder + Titel + Icon arbeiten. Ansonsten bleibt dir immer noch die Möglichkeit einen Eigene LayoutManager zu entwerfen, oder z.B. BoxLayout zu nutzen und dich auf WindwoResize Events zu hängen und jeweil die Größe der Komponenten berechnen und anpassen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.