BorderLayout

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen


Das BorderLayout

...wird bspw. standardmäßig von JFrame, JDialog und JApplet verwendet. Es besteht aus 5 Bereichen, in denen jeweils eine Komponente platziert werden kann. Die Bereiche sind mit Himmelsrichtungen bezeichnet, um die möglichen Positionen für Komponenten anzugeben.


Layout-Strategie

  • Das BorderLayout richtet das Hauptaugenmerk auf die Komponente, die im CENTER-Bereich positioniert wird. Diese Komponente erhält unabhängig von ihrer eingestellten Standardgröße (PreferredSize) den maximalen Platz in der Mitte des BorderLayouts, abhängig vom restlichen verfügbaren Platz, den die anderen Komponenten lassen.
  • Von der im NORTH- oder SOUTH-Bereich abgelegten Komponente wird vom BorderLayout nur die Höhe der PreferredSize berücksichtigt. Die Breitenangabe wird ignoriert, die Komponente wird also auf die gesamte Breite des BorderLayouts ausgedehnt.
  • Von der im EAST- oder WEST-Bereich abgelegten Komponente wird vom BorderLayout nur die Breite der PreferredSize berücksichtigt. Die Höhenangabe wird ignoriert, die Komponente wird also auf die verfügbare Höhe der Randbereiche des BorderLayouts ausgedehnt.


Folgendes Bildes zeigt ein BorderLayout mit vollständig belegten Layoutbereichen.

BorderLayout.png

Hier wurden die Bereiche des BorderLayout mit Buttons belegt, um sie sichtbar zu machen und die Strategie der Anordnung zu verdeutlichen.

Der Code zu dieser Darstellung sieht folgendermaßen aus: <code=java>import java.awt.*; import javax.swing.*;

public class BorderLayoutDemo {

 public BorderLayoutDemo() {
   JFrame frame = new JFrame("BorderLayoutDemo");
   frame.setSize(600, 450);
   frame.setLocationRelativeTo(null);
   frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
   
   //frame.setLayout(new BorderLayout()); //Tipp: Auf das explizite Setzen des BorderLayouts kann verzichtet werden.
   
   JButton north = new JButton("NORTH");
   JButton south = new JButton("SOUTH");
   JButton east = new JButton("EAST");
   JButton west = new JButton("WEST");
   JButton center = new JButton("CENTER");
   
   north.setPreferredSize(new Dimension(30, 100)); //Angabe für Breite wird vom BorderLayout ignoriert
   frame.add(north, BorderLayout.NORTH);
   
   south.setPreferredSize(new Dimension(30, 100)); //Angabe für Breite wird vom BorderLayout ignoriert
   frame.add(south, BorderLayout.SOUTH);
   
   east.setPreferredSize(new Dimension(100, 30)); //Angabe für Höhe wird vom BorderLayout ignoriert
   frame.add(east, BorderLayout.EAST);
   
   west.setPreferredSize(new Dimension(100, 30)); //Angabe für Höhe wird vom BorderLayout ignoriert
   frame.add(west, BorderLayout.WEST);
   
   center.setPreferredSize(new Dimension(30, 30)); //Angaben für Breite und Höhe werden vom BorderLayout ignoriert
   frame.add(center, BorderLayout.CENTER);
   frame.setVisible(true);
 }
 
 public static void main(String[] args) {
   SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       new BorderLayoutDemo();
     }
   });
 }

}</code=java> Hier ist deutlich zu erkennen, welche Angaben von Standardgrößen für Komponenten (PreferredSize) vom LayoutManager ignoriert und entsprechend seiner Strategie der Anordnung von Komponenten umgesetzt werden. Eine Standardgröße kann optional festgelegt werden.


Zusammenfassend kann man sagen, dass das BorderLayout für den

  • NORTH- und SOUTH-Bereich

die Höhe des Bereiches an den Platz, den die darin liegende Komponente zur vollständigen Anzeige benötigt, anpasst. Eine eventuelle Angabe der Breite der Komponente wird ignoriert, sie wird auf die Gesamtbreite des BorderLayouts ausgedehnt.

  • EAST- und WEST-Bereich

die Breite des Bereiches an den Platz, den die darin liegende Komponente zur vollständigen Anzeige benötigt, anpasst. Eine eventuelle Angabe der Höhe der Komponente wird ignoriert, sie wird auf die verfügbare Maximalhöhe des Bereichs ausgedehnt.

  • CENTER-Bereich

und der darin liegenden Komponente den restlichen Platz zuweist und diese in Breite und Höhe auf das Maximum ausdehnt. Dabei werden auch hier die eventuell voreingestellten Standarddimensionen der Komponente ignoriert.

Weitere Parameter für die Einstellung

Per Konstruktor oder über den Aufruf der Methoden setHgap() und setVgap() lassen sich noch Werte für einen Abstand zwischen den Komponenten im Layout einstellen. Mit verschachtelten BorderLayouts lassen sich bereits viele Layouts von GUIs abdecken.

Weiterführendes Material