Standpunkt von Componenten frei bestimmen

Status
Nicht offen für weitere Antworten.

Sneek

Aktives Mitglied
Hi, ich bringe mir Java jetzt schon seit paar Wochen mit Hilfe von diesem Buch bei. Dort werden die einzelnen Komponenten mit LayoutManagern im Fenster angeordnet. Gibt es auch eine Möglichkeit den Standpunkt im Fenster selbst zu bestimmen?
Wenn ich die LayoutManager verwende unterteil ich das Frame meistens in viele Panels und die dann nochmals in Panels um eine gewünschte GUI zu erstellen (trotz der verschiedenen vorgefertigten Layoutmöglichkeiten), aber irgendwie kommt mir das ganze ziemlich umständlich vor, oder ist das in dem Fall sinvoll?

lg Sneek
 
Bleib bei den LayoutManagern (und arbeitete dich gegebenfalls in die mächtigeren ein).
Wenn du selbst positionierst kann sich die größe nicht anpassen wenn du die größe des Fensters veränderst.
Ausserdem wird das Programm danach nur noch auf deinem Rechner verträglich aussehen, denn andere Nutzer haben
-andere Look and Feels
-andere Schriftarten und Größen
-Andere Themes
-andere Betriebssyteme
-andere Window Manager
-Andere Schreibrichtung

Ausserdem brauchst du viel mehr Code wenn du absolut positionierst und die Wartung wird komplizierter.
 
Es ist möglich in dem man als LayoutManager einfach null übergibt und dann die komponenten mit setBounds setzt(also die Größe und Position, add muss trotzdem noch sein). Es ist aber SEHR ABZURATEN, es so zu machen. Anderes Look and Feel, anderes System und schon könnte dein null-Layout dahin sein. Außerdem sollte die Positionierung der Element auch nach einem Resize des Fenster gut aussehen. Daher sollte man LayoutManager verwenden, die kümmern sich darum.
Es gibt auch weitere LayoutManager wie z.b. TableLayout und MigLayout, die nicht in der Standard API drin sind. Mit denen muss man weniger verschachteln 😉
 
Es ist in aller Regel sinnvoll. Man kann auch Komponenten absolut positionieren, das lässt man aber besser bleiben. Mit LayoutManagers hat man zumindest eine realistische Chance, GUIs zu bauen, die Ihre Komponenten korrekt vergrößern / verkleinern, wenn die Fenstergröße sich ändert; Komponenten auch noch dann richtig anzuordnen, wenn die Schriftarten auf dem System anders sind als auf dem Entwicklungsrechner; Komponenten mit unterschiedlichen Sprachen (deutsch, englisch, unterschiedliche Textlänge) richtig anzuordnen; Komponenten auch mit RTL (ComponentOrientation: Right-To-Left) sauber anzuordnen....

Null-Layout funktioniert normaler Weise nur auf einem Rechner wie gewünscht: Auf dem des Entwicklers.

Ebenius
 
Okay, dann versuch ichs weiter mit den LayoutManagern und werd mich noch mit den weiteren Managern befassen, in dem Buch wird nur auf drei LayoutManager (Flow-, Grid- und Borderlayout) eingegangen. Wusst gar nicht, dass so viel Probleme entstehen können bei einem absoluten Standpunkt, erscheint aber logisch.
 
Man spricht eher vom "Ort". Ein Standpunkt ist eher metaphorisch Ansichtssache. 🙂

Das wichtigste Layout ist wohl das BorderLayout. Grid- und FlowLayout kann man auch gut gebrauchen. Hin und wieder noch ein BoxLayout. Dann kann man das meiste machen. GridBagLayout ist super, wenn man genau weiß was man tut. Bis man dahin gelangt ist es eher ein Krampf.

Ebenius
 
Gut, da bleib ich vllt. doch erstmal bei den drei genannten. Nur um nochmal meine Zweifel zu mindern.
Ich habe jetzt z.B. ein Frame, das mittels BorderLayout mit zwei Panels (Panel1, Panel2) in West und East unterteilt. Wenn ich jetzt in Panel1 (gewählte Layout Möglichkeit auch BorderLayout) eine Komponente, beispielsweise eine Tabelle, anzeigen möchte, kann ich diese ja auch nur an 5 verschiedenen Standpunkten anzeigen. Das wäre ja alles kein Problem, nur wenn ich Center wähle ist trotzdem das ganze Panel ausgefüllt, auch wenn ich die größe der Tabelle kleiner festgesetz habe - Also müsste ich jetzt praktisch noch, (im falle des "westlichen" Panels)ein, ich nenn es mal Platzhalterpanel, in Panel1 auf der "östlichen" Seite erzeugen, damit die Komponenten aus Panel2 (East) nicht direkt an der Tabelle "drannklatschen"?

Ich hoffe ihr versteht was ich meine... 😳
 
Ich verstehe was Du meinst. Aber warum soll denn die Tabelle kleiner werden? Gegebenenfalls hilft der Horizontal- und VerticalGap im BorderLayout, wenn es nur darum geht, ein bisschen Abstand zu erzeugen. Oder ein Border an der Inneren Komponente. Wie soll denn die Tabelle da liegen? Soll sie immer mittig sein, aber ihre Größe nie verändern?

Ebenius
 
Ich verstehe was Du meinst. Aber warum soll denn die Tabelle kleiner werden? Gegebenenfalls hilft der Horizontal- und VerticalGap im BorderLayout, wenn es nur darum geht, ein bisschen Abstand zu erzeugen. Oder ein Border an der Inneren Komponente. Wie soll denn die Tabelle da liegen? Soll sie immer mittig sein, aber ihre Größe nie verändern?

Ebenius

Muss jetzt mal gestehen, dass ich noch nichts von einen Horizontal und VertivalGap gehört habe. Es geht mir eigentlich nur um einen Abstand, dass die Komponenten von Panel1 und Panel2 nicht so aneinander kleben.
 
BorderLayout(int hgap, int vgap)
Constructs a border layout with the specified gaps between components.

Das bedeutet du kannst hier Werte in Pixel(? man korrigiere mich wenn das falsch ist 😀) angeben, die den Abstand (hgap = horizontal ; vgap = vertikal) zwischen den einzelnen Segmenten des BorderLayouts bestimmen.

Also: hgap = 5 würde bedeuten das zwischen West und Center 5 Pixel frei sind sowie zwischen Center und East .. analog für vgab nur in vertikaler Ausrichtung
 
Das bedeutet du kannst hier Werte in Pixel(? man korrigiere mich wenn das falsch ist 😀) angeben, die den Abstand (hgap = horizontal ; vgap = vertikal) zwischen den einzelnen Segmenten des BorderLayouts bestimmen.

Also: hgap = 5 würde bedeuten das zwischen West und Center 5 Pixel frei sind sowie zwischen Center und East .. analog für vgab nur in vertikaler Ausrichtung

Ahh, jetzt kommt mir das ganze schon viel praktischer vor 🙂 Thx
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben