// 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
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();
}
}
