Swing: wie etwas Luft zwischen den Komponenten?

Hi,

Ich bastele gerade an einer Oberfläche mit dem GridBagLayout. (geht leider nicht anders, wenn ich nicht absolut machen will)

Nun habe ich aber das kleine aber feine Problem, daß die Komponenten direkt aneinander kleben, und ich hätte gerne etwas Luft dazwischen.

Hat einer eine Idee?
(habe JLabel, JTextfield, JCheckbox, JButton und JComboBox)

Weiterhin hätte ich gerne an einer Stelle eine horizontale Linie eingefügt, (in html mit vergleichbar) wie geht das? bzw. Wo soll ich in den tausenden von Seiten Doku suchen?

Besten Dank
Winni

Hallo,

Ich bastele gerade an einer Oberfläche mit dem GridBagLayout.
(geht leider nicht anders, wenn ich nicht absolut machen will)

Das ist doch eh optimal, GridBagLayout ist doch für etwas komplexere Oberflächen super zu benutzen.

Nun habe ich aber das kleine aber feine Problem, daß die
Komponenten direkt aneinander kleben, und ich hätte gerne
etwas Luft dazwischen.

Hat einer eine Idee?
(habe JLabel, JTextfield, JCheckbox, JButton und JComboBox)

Ja.

Box.createRigidArea()
Damit kannst du freien Platz zwischen den Komponenten einfügen. Im Prinzip ist eine Box eine Komponente die nichts anzeigt und nur Platz verbraucht.

BorderFactory.createEmptyBorder()
Damit kannst du um deine Kompontene einen leeren Rand erstellen, hat den Vorteil, dass du keine Extra-Komponente auf die Oberfläche bringen musst, wie bei der Box-Lösung. Allerdings musst du das für jede Komponente machen.

Weiterhin hätte ich gerne an einer Stelle eine horizontale
Linie eingefügt, (in html mit vergleichbar) wie
geht das?

Dazu erstellst du einfach ein Panel, wählst als Hintergrundfarbe z.B. Schwarz und setzt die Höhe des Panels auf 1-2 Pixel, dann hast du eine schwarze Linie. Ist auch gut in Verbindung mit GridBagLayout, weil du die Linie dazu bringen kannst, dass sie sich beim vergrößern des Fensters z.B. mitvergrößert.

bzw. Wo soll ich in den tausenden von Seiten Doku
suchen?

Z.b. in der…

mfg
deconstruct

Versuch doch mal setLayout(null); zu benutzen dann kannst du die Grenzen der Objekte festlegen sowie deren absolute Lage, ich habe mich auch monatelang mit gridbags herumgeschlagen und war nie zufrieden damit so gehts (für mich einfacher). Auch wenn die richtigen programmierer mich dafür zum Teufel jagen werden…

Hallo,

war nie zufrieden damit so gehts (für mich einfacher). Auch
wenn die richtigen programmierer mich dafür zum Teufel jagen
werden…

…und das zu Recht. Null-Layout ist schön und hübsch für kleine Sachen. Änder dann mal das Layout. Füg was neues ein usw usf. Das ist um Längen schwieriger beim NullLayout. Die GridBagConstraints lassen sich so einfach handhaben und zu einem großen Teil automatisieren, dass es ein Kinderspiel ist, damit was hinzupinseln.
Und spätestens, wenn sich das Fenster oder die Darstellungsfläche in der Größe ändern kann, dann kannst du dein Null-Layout wegwerfen, weil es hier nicht funktioniert. GridBagLayout ist auch keine Sache, die man nur bei Java findet, das wird auch bei Microsoft .NET, Delphi, Trolltech QT und anderen bekannten Frameworks verwendet, und zwar weil es eine der besten Techniken ist, Oberflächen zu Layouten.

Freunde dich damit an, dann wirst du es lieben *g*

mfg
deconstruct

Hallo Winni,

Ich bastele gerade an einer Oberfläche mit dem GridBagLayout.
(geht leider nicht anders, wenn ich nicht absolut machen will)

Bevor Du längere Zeit in die Verwendung von GridBagLayout investierst, kann ich Dir (und allen anderen) https://forms.dev.java.net/servlets/ProjectDocumentList empfehlen (bzw. http://www.jgoodies.com/freeware/forms/index.html).
Sehr intuitive, kurze und prägnante Layout-Bibliothek. Die Einarbeitung dauert etwa 1 Stunde. Dann kann einem auch das komplizierteste Layout nicht mehr schrecken (wenn es um SWING geht).

cu
Frank

Hallo,

Bevor Du längere Zeit in die Verwendung von GridBagLayout
investierst, kann ich Dir (und allen anderen)
https://forms.dev.java.net/servlets/ProjectDocumentList
empfehlen (bzw.
http://www.jgoodies.com/freeware/forms/index.html).
Sehr intuitive, kurze und prägnante Layout-Bibliothek. Die
Einarbeitung dauert etwa 1 Stunde. Dann kann einem auch das
komplizierteste Layout nicht mehr schrecken (wenn es um SWING
geht).

Hört sich zwar an für sich relativ gut an, aber ich sehe auf den ersten Blick nicht, wo der wirkliche Unterschied oder Vorteil gegenüber GridBagLayout liegt. Auch Forms scheint ein Grid zu verwenden und benutzt Constraints zum festlegen des spezifischeren Layouts für eine Komponente. Genau das macht GridBag auch. Das einzige was einem eventuell abgenommen wird, ist das schreiben von ein paar Hilfsmethoden zum Erstellen der Constraints, aber das muss man bei GridBag ja auch nur einmal im Leben machen und das dauert nun vlt mal 20 Minuten oder so.

Ich muss zugeben, dass ich jetzt nur schnell das Whitepaper und die darin enthaltenen Beispiele überflogen habe, daher kannst du mich vielleicht verbessern, wenn ich die guten Features von Forms irgendwie noch nicht begriffen hab :wink:

mfg
deconstruct

Hallo deconstruct,

ich finde die Lesbarkeit besser. Bei den GridbagLayout muß man das ganze ausprogrammieren.
Natürlich werden bei beiden Constraints benutzt, aber bei Forms muß ich nur noch die Position des Elements angeben (Row und Column), die Positionierung ist im FormLayout-Contstructor übergeben. Diese Form der Definition eines Layouts finde ich wesentlich lesbarer. Insbesondere für unsere Screendesigner, die dann und wann diese Layouts uns direkt geben.
Desweiteren kann man den Forms die Constraints deklarativ z.B. über Strings machen. Diese könnte man sogar in einen Property-Datei auslagern und dann sprachspezifisch definieren.
Das ist dann wichtig, wenn man Applikationen hat, die auch mal im Arabischen Markt (oder ähnlichen) entsprechend den Gepflogenheiten der dortigen Menschen eingesetzt werden.

Du hast natürlich recht, dass man so ein Layout i.d.R. nicht sehr oft umschmeißt. Ich habe aber für mich festgestellt, dass ich mit Forms sehr viel schneller bin. Außerdem kann man hier Layouts definieren, die auch mit unterschiedlicher DPI-Zahl vernünftig umgehen können (wenn man z.B. etwas ausdrucken möchte :wink:).

Im Endeffekt bleibt es jedem selber überlassen, mit was man am besten auskommt.

Gruß,
Frank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Frank,

das ist wohl eine neue Software.

Ich bin aber nunmal auf Eclipse 3.0 festgelegt und nutze darin den Visual Editor und schaffe da ganz passable Dinge …
(ok, manchmal schläft mir das Gesicht ein, aber sonst ists ok)

Dank auch den anderen Helfern, habe es nun mit EmptyBorder gemacht…

Gruß
Winni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

wie wärs mit

gbc.insets = new Insets(x, x, x, x);

legt die abstände zu den rändern fest…

Hallo Winni,

Ich bin aber nunmal auf Eclipse 3.0 festgelegt und nutze darin
den Visual Editor und schaffe da ganz passable Dinge …
(ok, manchmal schläft mir das Gesicht ein, aber sonst ists ok)

Welche Plugins benutzt Du denn für den Visual Editor. Vor drei Wochen hat das bei mir noch nicht funktioniert. Gibt es da schon eine Update-Site?

Gruß,
Frank

Hi,

schau mal unter http://www.eclipse.org/vep und dann Downloads und dann das Stabel Built vom 28.6. S20040628 und bei mir gehts.
Nur wird bei JLABEL nicht mehr automatisch eine getJLabel()-Methode generiert, aber in der Newsgroup wurde mir geholfen.

Viel Erfolg

Winni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]