/***************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* Das Programm demonstriert die verschiedenen Layout-Manager. */ /***************************************************************/ import java.awt.*; import javax.swing.*; class LayoutDemo { // Hilfsfunktion zur Erzeugung eines Buttons: JButton newStdButton(String st) { JButton but = new JButton(st); but.setFont(new Font("Arial",Font.BOLD,22)); but.setForeground(Color.black); return but; } // Konstruktor: Erzeugung der Grafik-Oberflaeche: LayoutDemo() { // Verschiedene Frames zur Demonstation der Layout-Moeglichkeiten: JFrame frmFlow, frmBorder, frmBox, frmGrid, frmGridBag, frmCard; // Hilfsvariable fuer die ContentPanes der einzelnen Frames: Container cp; // Frame mit FlowLayout: // Komponenten werden zeilenweise von links oben nach rechts unten eingefuegt. // Zeilenwechsel, wenn in der aktuellen Zeile nicht mehr genug Platz. frmFlow = new JFrame("FlowLayout"); frmFlow.setLocation(500,0); frmFlow.setSize(new Dimension(320,170)); cp = frmFlow.getContentPane(); cp.setLayout(new FlowLayout()); cp.add(newStdButton("EinsEinsEinsEinsEins")); cp.add(newStdButton("ZweiZwei")); cp.add(newStdButton("DreiDrei")); cp.add(newStdButton("Vier")); cp.add(newStdButton("Fuenf")); cp.add(newStdButton("Sechs")); frmFlow.setVisible(true); // Frame mit BorderLayout: // Komponenten koennen an die Positionen NORTH, SOUTH, // EAST, WEST und CENTER gesetzt werden. frmBorder = new JFrame("BorderLayout"); frmBorder.setLocation(500,100); frmBorder.setSize(new Dimension(420,140)); cp = frmBorder.getContentPane(); cp.setLayout(new BorderLayout()); cp.add(newStdButton("Eins"),BorderLayout.NORTH); cp.add(newStdButton("Zwei"),BorderLayout.WEST); cp.add(newStdButton("Drei"),BorderLayout.CENTER); cp.add(newStdButton("Vier"),BorderLayout.EAST); cp.add(newStdButton("Fuenf"),BorderLayout.SOUTH); frmBorder.setVisible(true); // Frame mit BoxLayout: // Frame erhaelt ein eindimensionales Layout (entweder horizontal // oder vertikal), in das die Komponenten von links nach rechts // bzw. von oben nach unten eingefuegt werden. frmBox = new JFrame("BoxLayout"); frmBox.setLocation(500,200); frmBox.setSize(new Dimension(420,100)); // Erzeugung einer Box: Sie nimmt die Komponenten auf // und wird anschliessend in den Frame eingefuegt. Box b = Box.createHorizontalBox(); b.add(newStdButton("Eins")); b.add(Box.createHorizontalStrut(30)); // Trennstreifen b.add(newStdButton("Zwei")); b.add(Box.createHorizontalStrut(60)); // Trennstreifen b.add(newStdButton("Drei")); frmBox.getContentPane().add(b); frmBox.setVisible(true); // Frame mit GridLayout: // Frame erhaelt ein zweidimensionales Layout (Zeilen und // Spalten), in das die Komponenten dann von oben nach unten // und (innerhalb der einzelnen Zeilen) von links nach rechts // eingefuegt werden. Alle Zellen haben dieselbe Groesse. frmGrid = new JFrame("GridLayout"); frmGrid.setLocation(500,300); frmGrid.setSize(new Dimension(210,200)); cp = frmGrid.getContentPane(); cp.setLayout(new GridLayout(3,2)); // Drei Zeilen, zwei Spalten cp.add(newStdButton("Eins")); cp.add(newStdButton("Zwei")); cp.add(newStdButton("Drei")); cp.add(newStdButton("Vier")); cp.add(newStdButton("Fuenf")); cp.add(newStdButton("Sechs")); frmGrid.setVisible(true); // Frame mit GridBagLayout: // Frame erhaelt wie im GridLayout ein zweidimensionales Layout (Zeilen und Spalten). // Im Unterschied dazu koennen aber mehrere Felder des Layouts zu einem groesseren Feld // zusammengefasst werden. Ausserdem koennen Komponenten durch Angabe der Koordinaten // gezielt an eine bestimmte Stelle gebracht werden. // Frame erzeugen und Layout setzen: frmGridBag = new JFrame("GridBagLayout"); frmGridBag.setLocation(500,400); frmGridBag.setSize(new Dimension(170,160)); cp = frmGridBag.getContentPane(); cp.setLayout(new GridBagLayout()); // oben: Button mit zwei Feldern Breite und einem Feld Hoehe GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; // Ankerposition: Spalte 0 gbc.gridy = 0; // Ankerposition: Zeile 0 gbc.gridwidth = 2; // Breite: 2 Felder gbc.gridheight = 1; // Hoehe: 1 Feld gbc.fill = GridBagConstraints.BOTH; // Komponente soll die Felder voll ausfuellen JButton but = newStdButton("Eins"); ((GridBagLayout)cp.getLayout()).setConstraints(but,gbc); cp.add(but); // links darunter: Button mit einem Feld Breite und zwei Feldern Hoehe gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 2; but = newStdButton("Zwei"); gbc.fill = GridBagConstraints.BOTH; ((GridBagLayout)cp.getLayout()).setConstraints(but,gbc); cp.add(but); // rechts: zwei Buttons mit je einem Feld Breite und einem Feld Hoehe gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.fill = GridBagConstraints.BOTH; but = newStdButton("Drei"); ((GridBagLayout)cp.getLayout()).setConstraints(but,gbc); cp.add(but); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 2; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.fill = GridBagConstraints.BOTH; but = newStdButton("Vier"); ((GridBagLayout)cp.getLayout()).setConstraints(but,gbc); cp.add(but); frmGridBag.setVisible(true); // Frame mit CardLayout: // Komponenten ("Karten") werden auf einem Stapel abgelegt, // durch den man blaettern kann. frmCard = new JFrame("CardLayout"); frmCard.setLocation(500,500); frmCard.setSize(new Dimension(420,150)); // Erzeugung eine TabbedPane: Sie nimmt die einzelnen Karten // auf und wird anschliessend in den Frame eingefuegt: JTabbedPane tp = new JTabbedPane(JTabbedPane.RIGHT); tp.setFont(new Font("Arial",Font.BOLD,22)); tp.setForeground(Color.black); // Definition der einzelnen Karten... JPanel k1 = new JPanel(), k2 = new JPanel(), k3 = new JPanel(); k1.add(newStdButton("Dies ist Karte 1")); k2.add(newStdButton("Dies ist Karte 2")); k3.add(newStdButton("Dies ist Karte 3")); // ...und Einfuegen in die TabbedPane: tp.addTab("Karte 1",k1); tp.addTab("Karte 2",k2); tp.addTab("Karte 3",k3); // Einfuegen der TabbedPane in den Frame: frmCard.getContentPane().add(tp); frmCard.setVisible(true); } } public class Layout { public static void main(String args[]) { new LayoutDemo(); } }