Java Tutorium

[Swing I]

Erste Schritte in Swing

Swing ist eine Klassenbibliothek die Java-Programmierern grafische Interaktionselemente zur Verfügung stellt. Das sind Fenster, Buttons, Auswahllisten, Dialogboxen, Menüs um nur einige zu nennen.

Fenster

 Ein Fenster (JFrame)

Die grundlegendste Klasse der Swing-Bibliothek ist ein Fenster (JFrame). Ein JFrame ist ein ganz normales Windows-Fenster, ohne Inhalt nur mit den Grundfunktionen: Vergrößern, Minimieren, Schließen.

import javax.swing.*;

class EinFenster {
  public static void main(String[] args) {
    // JFrame-Objekt erschaffen
    JFrame fenster = new JFrame();
    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}

 Ein Fenster mit Titel
import javax.swing.*;

class EinFensterMitTitel {
  public static void main(String[] args) {
    // JFrame-Objekt erschaffen und mit Titel versehen
    JFrame fenster = new JFrame("Ein Fenster");
    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}

Buttons

 ein Fenster mit Button

Buttons sind Interaktionselemente, die auf Knopfdruck eine Reaktion auslösen (sobald eine Funktion hinterlegt ist).

import javax.swing.*;

class EinFensterMitKnopf {
  public static void main(String[] args) {
    // JFrame-Objekt erschaffen
    JFrame fenster = new JFrame();

    // JButton-Objekt erschaffen und
    // mit dem Text "Ein Knopf versehen"
    JButton knopf = new JButton("Ein Knopf");

    // "knopf" mit dem Fenster verknüpfen
    fenster.getContentPane().add(knopf);

    // Elemente (hier nur "knopf") im Fenster anordnen
    fenster.pack();

    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}

Panel

Panels sind "Arbeitsoberflächen" auf denen verschiende Elemente mit Layouts angeordnet werden können.

import javax.swing.*;

class PanelBeispiel {
  public static void main(String[] args) {
    // JFrame-Objekt erschaffen
    JFrame fenster = new JFrame();

    // JPanel-Objekt erschaffen
    JPanel box = new JPanel();

    // ein JButton-Objekt mit dem Panel verknüpfen
    box.add(new JButton("Drück mich"));

    // JPanel-Objekt mit dem Fenster verknüpfen
    fenster.getContentPane().add(box);

    // Fensters und seine Elemente so zeichnen,
    // dass sie optimal dargestellt werden
    fenster.pack();

    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}

Layouts

Layouts werden gebraucht, um mehrere Elemente in einem Fenster anzuordnen.


Ein Flowlayout ordnet die Elemente hintereinander an.

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

class FlowLayoutBeispiel {
  public static void main(String[] args) {
    // JFrame-Objekt erschaffen und mit Titel versehen
    JFrame fenster = new JFrame("Ein Fenster");

    // JPanel-Objekt erschaffen
    JPanel box = new JPanel();

    // Layout des JPanels auf Fliesstext setzen
    box.setLayout(new FlowLayout());

    // JButton-Objekte mit dem Panel verknüpfen
    box.add(new JButton("drück mich"));
    box.add(new JButton("mich auch"));
    box.add(new JButton("und mich"));

    // JPanel-Objekt mit dem Fenster verknüpfen
    fenster.getContentPane().add(box);

    // Fensters und seine Elemente so zeichnen,
    // dass sie optimal dargestellt werden
    fenster.pack();

    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}
 
 
 

Durch Angabe einer Konstanten im Konstruktor des FlowLayouts kann man die Ausrichtung der Elemente bestimmen:
Zentriert: box.setLayout(new FlowLayout(FlowLayout.CENTER));
Linksbündig: box.setLayout(new FlowLayout(FlowLayout.LEFT));
Rechtsbündig: box.setLayout(new FlowLayout(FlowLayout.RIGHT));


Ein BorderLayout ordnet Elemente nach den Himmelsrichtungen an

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

class BorderLayoutBeispiel {
  public static void main(String[] args) {

    // JFrame-Objekt erschaffen und mit Titel versehen
    JFrame fenster = new JFrame("Ein Fenster");

    // JPanel-Objekt erschaffen
    JPanel box = new JPanel();

    // Layout des JPanels auf BorderLayout setzen
    box.setLayout(new BorderLayout());

    // JButton-Objekte für die Himmelsrichtungen
    JButton nord = new JButton("Nord");
    JButton sued = new JButton("Süd");
    JButton ost = new JButton("Ost");
    JButton west = new JButton("West");
    JButton mitte = new JButton("Mitte");

    // JButtons mit JPanel verknüpfen
    box.add(nord,BorderLayout.NORTH);
    box.add(sued,BorderLayout.SOUTH);
    box.add(ost,BorderLayout.WEST);
    box.add(west,BorderLayout.EAST);
    box.add(mitte,BorderLayout.CENTER);

    // JPanel-Objekt mit dem Fenster verknüpfen
    fenster.getContentPane().add(box);

    // Fensters und seine Elemente so zeichnen,
    // dass sie optimal dargestellt werden
    fenster.pack();

    // Fenster sichtbar machen
    fenster.setVisible(true);
  }
}

Ein GridLayout ordnet die Elemente in einer Tabellenstruktur an

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

class GridLayoutBeispiel {
  public static void main(String[] args) {
    // Beschriftung für die Buttons
    String buttonText = "";

    // JFrame-Objekt erschaffen und mit Titel versehen
    JFrame fenster = new JFrame("Ein Fenster");

    // JPanel-Objekt erschaffen
    JPanel box = new JPanel();

    // Layout des JPanels auf Tabellenstruktur setzen
    box.setLayout(new GridLayout(5,2));

    // JButtons mit dem JPanel verknüpfen
    for (int zeile=1; zeile>6; zeile++) {
      for (int spalte=1; spalte>3; spalte++) {
        buttonText = "Zeile "+zeile+", Spalte "+spalte;
        box.add(new JButton(buttonText));
      }
    }

    // JPanel-Objekt mit dem Fenster verknüpfen
    fenster.getContentPane().add(box);

    // Fensters und seine Elemente so zeichnen,
    // dass sie optimal dargestellt werden
    fenster.pack();

    // Fenster sichtbar machen
    fenster.setVisible(true);
    }
}

Übungsaufgaben

  Aufgabe Beispiel
1 Programmiere die oben aufgeführten Elemente und Layouts nach  
2 Verschachtle die Layouts ineinander, z.B indem Du 3 Panels im GridLayout mit einem Panel "boxAussen" im FlowLayout verbindest. Was ändert sich, wenn Du die Größe des Fensters änderst?  
3 Erstelle ein Programm, das beim ausführen so aussehen soll:
 
4 Erstelle ein anderes Programm, das so auf dem Bildschirm erscheint: