Ich kriege die Grössen einfach nicht auf die Reihe!

  • Themenstarter Themenstarter A380
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

A380

Gast
Hi

Also mit Grössenangaben habe ich einfach meine Probleme:

1. Beispiel:
Ich möchte ein JPanel im Center Teil eines Border Layouts plazieren, mit einem Etched Border. Dieses JPanel soll aber nicht 100% des Center Teils ausfüllen sondern noch je 10 px auf allen Seiten Platz lassen, doch ich kriege das nicht hin. Muss ich das über die Grösse des JFrames steuern, oder das JPanel oder beides?
Und wenn ich nur die Breite einer Komponente verändern will, wie kann ich das machen ohne auch die Höhe explizit angeben zu müssen?

2. Beispiel
Wenn ich die Fenstergrösse veränderbar lasse, dann werden meine Textfelder beim verkleinern extrem schmal, obwohl ich setMinimumSize() aufgerufen habe. Wie kann ich das verhindern?
 
A380 hat gesagt.:
Dieses JPanel soll aber nicht 100% des Center Teils ausfüllen sondern noch je 10 px auf allen Seiten Platz lassen, doch ich kriege das nicht hin.
Ich glaub, das wird über die Methoden
Code:
setHgap(int hgap)
und
Code:
setVgap(int vgap)
einer BorderLayout-Instanz eingestellt.
 
Hi again

Problem ist eben, dass ich weder im East, noch im West Teil etwas habe, somit bewirkt der Vgap schon mal nix. Aber ich möchte gerne x Pixel Abstand zum Rand auf beiden Seiten. Wie kriegt man das sonst hin?
 
Hm..., ich weiss nicht ob dir das was bringen wird aber dem BorderLayout kannste schon von vornherein sagen daste n Abstand haben willt.

x.setLayout(new BorderLayout(10,10));
 
Ne kommt ja auf dasselbe. Und ein setMargin hab ich ja auch nicht zu Verfügung 🙁
 
Schau Dir den Codeausschnitt an. Mit GridbagLayout kannst Du jedes Layoutproblem lösen.
Hier etwas übertrieben aber bei mehreren Komponenten ist es das beste Layout.
Code:
...
JTextField vornameField = new JTextField();
JTextField nachnameField = new JTextField();
...
this.setBorder(
  BorderFactory.createCompoundBorder(
    // Aussenrand
    BorderFactory.createCompoundBorder(
      BorderFactory.createEmptyBorder(10,10,10,10),
      BorderFactory.createEtchedBorder()
    ),
    // Innenrand
    BorderFactory.createEmptyBorder(4,4,4,4)
  )
);
    
this.setLayout(new GridBagLayout());
    
this.add(new JLabel("Vorname"), new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 2, 2), 0, 0));
this.add(vornameField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 2, 0), 200, 0));
this.add(new JLabel("Nachname"), new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 2), 0, 0));
this.add(nachnameField, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 200, 0));    
    
// Platzhalter für den restlichen vertikalen Bereich
this.add(Box.createVerticalGlue(), new GridBagConstraints(2, 2, 1, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, new Insets(0, 0, 0, 0), 0, 0));
 
Danke Gast 🙂 You rule! Das mit dem Compound Border hätte ich nie selber herausgefunden, so klappts einwandfrei.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben