dh-Materialien
Java Projekte
// JavaProject LayoutPerformer


Animationen bieten den Vergleich verschiedener Layouts. Werden einem frame (oder einem anderen Objekt mit den Eigenschaften eines Containers) Panels (oder andere Komponenten) sukzessive hinzugefügt, so hängt deren Darstellung vom gewählten Layout und von der Anzahl der Panels ab.

FlowLayout. Im Programm wird der einparametrige Konstruktor der Klasse FlowLayout verwendet: FlowLayout(o);. Die Panels werden zeilenweise angeordnet. Hierbei bestimmt der Parameter o die Ausrichtung der Zeilen. Mögliche Werte für o sind: LEFT, RIGHT, CENTER, LEADING oder TRAILING.

GridLayout. Im Programm wird der vierparametrige Konstruktor der Klasse GridLayout verwendet: GridLayout(r, c, h, v);. Die Parameter r, c, h und v sind vom Typ int. Mit r wird die Anzahl der Zeilen, mit c die (maximale) Anzahl der Spalten festgelegt. h ist der horizontale und v der vertikale Abstand jeweils benachbarter Panels, gemessen in Pixeln. Ist r·c kleiner als die Anzahl der Panels, so wird der Parameter c ignoriert. Alle Panels haben grundsätzlich dieselbe Größe. Der erste Parameter der Methode SetSize wird ignoriert, sofern r größer ist als die Anzahl der Panels.

BorderLayout. Das BorderLayout definiert fünf Regionen: WEST, NORTH, EAST, SOUTH und CENTER. In jeder dieser Regionen kann jeweils nur eine einzige Komponente platziert werden. Die Breite der CENTER-Region ist abhängig von den Breiten der WEST- und der EAST-Region.

Kein Layout. Die Panels werden nacheinander in der linken oberen Ecke aufeinander gestapelt.

LayoutPerformer.java

// LayoutPerformer.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class MenuBar extends JMenuBar implements ActionListener {
    private static final long serialVersionUID = 0L;

    JMenu start;
    JMenuItem start_flow;
    JMenuItem start_grid;
    JMenuItem start_border;
    JMenuItem start_null;
    Frame lfr;

    public MenuBar(Frame lfr) {
        this.lfr = lfr;

        start = new JMenu("Start");
        add(start);

        start_flow = new JMenuItem("FlowLayout");
        start_flow.addActionListener(this);
        start.add(start_flow);

        start_grid = new JMenuItem("GridLayout");
        start_grid.addActionListener(this);
        start.add(start_grid);

        start_border = new JMenuItem("BorderLayout");
        start_border.addActionListener(this);
        start.add(start_border);

        start_null = new JMenuItem("Kein Layout");
        start_null.addActionListener(this);
        start.add(start_null);
    }

   
@Override    
    public void
actionPerformed(ActionEvent e) {
        if (!lfr.isRunning) {
            if (e.getSource() == start_flow) flowPanels();
            if (e.getSource() == start_grid) gridPanels();
            if (e.getSource() == start_border) borderPanels();
            if (e.getSource() == start_null) nullPanels();
        }
    }

    private void flowPanels() {
        removePanels();
        lfr.setLayout(new FlowLayout(FlowLayout.CENTER));
        lfr.run_typ = 1;
        lfr.runAnimation();
    }

    private void gridPanels() {
        removePanels();
        lfr.setLayout(new GridLayout(4, 2, 3, 3));
        lfr.run_typ = 2;
        lfr.runAnimation();
    }

    private void borderPanels() {
        removePanels();
        lfr.setLayout(new BorderLayout(3, 3));
        lfr.run_typ = 3;
        lfr.runAnimation();
    }

    private void nullPanels() {
        removePanels();
        lfr.setLayout(null);
        lfr.run_typ = 0;
        lfr.runAnimation();
    }

    private void removePanels() {
        lfr.getContentPane().removeAll();
        lfr.repaint();
    }
}


class Panel extends JPanel {
    private static final long serialVersionUID = 0L;

    JLabel label = new JLabel();
    Font font = new Font("Arial", Font.PLAIN, 24);

    Panel() {
        setSize (150, 100);
        setBackground(Color.GRAY);
        setBorder(BorderFactory.createEtchedBorder());

        label.setFont(font);
        label.setForeground(Color.WHITE);
        add(label);
    }
}


class Frame extends JFrame implements Runnable { // Threads
    private static final long serialVersionUID = 0L;
    Image icon;
    MenuBar menubar;
    Panel[] panels;

    Thread animation;
    byte run_typ;
    boolean isRunning = false;

    public Frame() {
        setTitle("Vergleich von Layouts");
        icon = Toolkit.getDefaultToolkit().getImage("dh.png");
        setIconImage(icon);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(349, 301);
        setLocationRelativeTo(null);

        menubar = new MenuBar(this);
        setJMenuBar(menubar);

        setVisible(true);
    }

    public void runAnimation() {
        animation = new Thread(this);
        animation.start();
        isRunning = true;
    }

    public void sleep() {
        try {
            Thread.sleep(1300);
        }
        catch
(InterruptedException e) { }
    }

    @Override
    public void run() {
        String[] constraints = new String[5];
        String[] txt = new String[5];
        Panel[] panels = new Panel[7];
        int i = 0;

        constraints[0] = BorderLayout.WEST;
        constraints[1] = BorderLayout.NORTH;
        constraints[2] = BorderLayout.EAST;
        constraints[3] = BorderLayout.CENTER;
        constraints[4] = BorderLayout.SOUTH;

        txt[0] = "WEST";
        txt[1] = "NORTH";
        txt[2] = "---EAST---";
        txt[3] = "***CENTER***";
        txt[4] = "SOUTH_SOUTH_SOUTH_SOUTH_SOUTH";

        if (run_typ < 3) {
            while (i < 7) {
                panels[i] = new Panel();
                panels[i].label.setText(" "+i+" ");
                add(panels[i]);
                if (i < 6) sleep();
                i++;
            }
        }
        if (run_typ == 3) {
            while (i < 5) {
                panels[i] = new Panel();
                panels[i].label.setText(txt[i]);
                add(panels[i], constraints[i]);
                if (i < 4) sleep();
                i++;
            }
        }
        isRunning = false;
    }
}


public class LayoutPerformer {

    public static void main(String[] args) {
        new Frame();
    }
}

Download LayoutPerformer