You can edit almost every page by Creating an account. Otherwise, see the FAQ.

BoxLayout

Aus EverybodyWiki Bios & Wiki
Wechseln zu:Navigation, Suche

Das BoxLayout wurde mit dem Gedanken entwickelt, ihm die Mächtigkeit des GridBagLayout zu geben, ohne dessen Komplexität zu übernehmen. Es hat etwas Ähnlichkeit mit dem FlowLayout und mit ihm ist so gut wie jedes erdenkliche Layout (für einen Teil einer komplexen GUI) möglich. Jedoch besitzt es den Nachteil, dass für ein großes Layout recht viele Boxen benötigt werden. Deshalb sollte vorher überlegt werden, ob eine Kombination von mehreren anderen Layoutmanagern nicht besser geeignet wäre.

Das BoxLayout ordnet ihm hinzugefügte Komponenten nebeneinander oder untereinander an.

Konstanten[Bearbeiten]

Das BoxLayout kann wie alle LayoutManager einfach mit new erzeugt werden. Dazu erwartet es die Komponente, für den das Layout bestimmt ist, sowie die Ausrichtung. Hierbei werden vier Konstanten verwendet:

X_AXIS = Die Komponenten werden horizontal, ähnlich des FlowLayouts auf einer Zeile von links nach rechts (ohne automatischen Zeilenumbruch) angeordnet. Y_AXIS = Die Komponenten werden vertikal angeordnet. LINE_AXIS und PAGE_AXISordnen ebenfalls in die jeweiligen Richtungen an, beachten dabei aber die ComponentOrientation. Damit ist es möglich, die Anordnung an andere Schriftbilder anzupassen. (z. B. von rechts nach links)

JPanel boxPanel = new JPanel();
boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.X_AXIS));

oder kurz:

JPanel boxPanel = new JPanel(new BoxLayout(boxPanel, BoxLayout.X_AXIS));

Der obige Code setzt ein horizontales BoxLayout für das jeweilige Panel. Um die Erzeugung zu vereinfachen, werden Boxen angeboten. Dabei handelt es sich um Komponenten, die bereits mit dem BoxLayout ausgestattet sind. Diese werden über 2 einfache Factory-Methoden erzeugt:

Box hBox = Box.createHorizontalBox();
Box vBox = Box.createVerticalBox();

Unsichtbare Komponenten[Bearbeiten]

Zudem bietet das BoxLayout noch unsichtbare Komponenten zur Ausrichtung an:

Rigid Area = Eine Komponente mit fester Größe. Durch sie ist es z. B. möglich, Komponenten in variablem Abstand anzuordnen.

Box hBox = Box.createHorizontalBox();
hBox.add(new JButton("Links"));
hBox.add(Box.createRigidArea(new Dimension(10, 0)));
hBox.add(new JButton("Mitte"));
hBox.add(Box.createRigidArea(new Dimension(15, 0)));
hBox.add(new JButton("Rechts"));

So entsteht zwischen links und mitte ein Abstand von 10 px., und zwischen mitte und rechts ein Abstand von 15 px.

Glue = Der Glue dehnt sich über den gesamten zu Verfügung stehenden Platz aus. Ein Glue als erste Komponente auf einer mit BoxLayout horizontal ausgerichteten Box würde alle nachfolgenden Komponenten ganz nach rechts "drücken".

Box vBox = Box.createVerticalBox();
vBox.add(new JButton("Ganz oben"));
vBox.add(Box.createVerticalGlue());
vBox.add(new JButton("Ganz unten"));

Filler = Sind wie Rigids, nur flexibler, da man minimal, maximal und preferred Size angeben muss.

Die Komponenten werden nach ihrer Preferred Size angeordnet. Zudem werden die alignmentX/Y beachtet.

Beispiel[Bearbeiten]

(Dieses Beispiel wäre leicht auch mit anderen Managern realisierbar gewesen, es soll nur die Anwendung zeigen.)

import java.awt.Dimension;
 
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
 
public class ImageshowFrame extends JFrame
{
    public ImageshowFrame(String title)
    {
        super(title); //Setzt den Fenstertitel per JFrame-Konstruktor.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Beim Betätigen des Schließen-Button Programm beenden.
 
        setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); //Setzt ein vertikales Boxlayout als Manager.
 
        Box headerBox = Box.createHorizontalBox(); //Erzeugt eine horizontale Box.
        headerBox.add(new JLabel("Willkommen zur Boxlayout-Demo")); //Fügt ein neues JFrame hinzu.
        add(headerBox); //Fügt die Box hinzu.
 
        Box controlBox = Box.createHorizontalBox(); //Erzeugt eine horizontale Box.
        controlBox.add(Box.createRigidArea(new Dimension(10, 0))); //Von dem linken Rand bis zum nächsten Komponenten 10 px. Abstand. 
        controlBox.add(new JButton("Zurück")); //Fügt eine Button hinzu.
        controlBox.add(Box.createHorizontalGlue()); //Alle Komponenten werden von hier aus so weit wie möglich nach links oder rechts "verschoben".
        controlBox.add(new JButton("Vorwärts")); //Fügt einen Button hinzu.
        controlBox.add(Box.createRigidArea(new Dimension(10, 0))); //Von dem letzten Komponenten bis zum nächsten (oder Rand) 10 px. Abstand.
        add(controlBox); //Fügt die Box hinzu.
 
 
        Icon icon = new ImageIcon("bild.png"); //Läd ein Bild.
 
        Box iconBox = Box.createHorizontalBox(); //Erzeugt eine horizontale Box.
        iconBox.add(Box.createHorizontalGlue()); //Fügt einen Glue hinzu.
 
        JLabel iconLabel = new JLabel(icon); //Fügt ein neues Label mit dem Icon hinzu.
        //iconLabel.setPreferredSize(new Dimension(icon.getIconWidth(), icon.getIconHeight())); //Setzt die Pref. Size des Labels auf die Icongröße. Das ist nicht umbedingt erforderlich.       
        iconBox.add(iconLabel); //Fügt das Label zu der Box hinzu.
        iconBox.add(Box.createHorizontalGlue()); //Fügt einen Glue hinzu.
        add(iconBox); //Fügt die Box hinzu.
 
 
        Box printBox = Box.createHorizontalBox(); //Erzeugt eine horizontale Box.
        printBox.add(Box.createHorizontalGlue()); //Fügt einen Glue hinzu
        printBox.add(new JButton("Drucken")); //Fügt einen JButton hinzu
        printBox.add(Box.createHorizontalGlue()); //Fügt einen Glue hinzu
        add(printBox); //Fügt die Box hinzu.
 
        pack(); //Setzt die Größe des JFrames und des Layouts auf die Minimal benötigte Größe.
        setVisible(true); //Macht das JFrame sichtbar.
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() //Das JFrame soll innerhalb des EDT erzeugt werden.
        {
            public void run()
            {
               new ImageshowFrame("BoxLayout-Demo"); //Erzeugt das Hauptframe.
            }
        });
    }
}

Weiterführendes Material[Bearbeiten]


Diese artikel "BoxLayout" ist von Wikipedia The list of its authors can be seen in its historical and/or the page Edithistory:BoxLayout.



Read or create/edit this page in another language[Bearbeiten]