Elemente eines Programms mit GUI


Beispiel Frame mit Zähler-Objekt, 2 Buttons & 1 Label

Abbildung ZFrame.class Abbildung ZFrame.class

Das o.g. Programm ZFrame stellt einen einfachen Zähler dar: wenn der Weiter-Button gedrückt wird, dann wird raufgezählt, beim Zurueck-Button wird hinuntergezählt.

Grundsatz jeder GUI

Die GUI verrichtet selbst keine inhaltlichen Arbeiten, sie verarbeitet nur mittels der Listener-Objekte die Benutzer-Eingaben, und sie zeigt Daten an. Die Verarbeitung dieser Daten erfolgt stets in einem separaten Objekt, das mit dem GUI-Objekt in Verbindung steht.

Programm-Entwicklung

Am Anfang der Programmentwicklung steht eine Beschreibung dessen, was das Programm tun soll. In diesem Beispiel soll mit Hilfe von 2 Buttons eine Zahl rauf- und runtergezählt werden. Das Ergebnis soll jeweils in einem Label oder TextField angezeigt werden.

Aus dieser Beschreibung ergibt sich eine Arbeitsteilung zwischen den Komponenten des Programms. Insbesondere zählt der Frame nicht selbst, sondern er deligiert das Zaehlen an ein spezielles Zaehler-Objekt, dessen public Methoden in geeigneter Weise angesprochen werden müssen durch die Listener-Objekte der GUI.

Programm-Design

Damit ergeben sich folgende Bestandteile des Programms:

Übung:

Man definiere eine Klasse Zaehler, die als Application ohne jede Benutzeroberfläche die o.g. Methoden realisiert.

Programm-Struktur

Im Deklarationsteil der Klasse ZFrame werden die Elemente des ZFrame deklariert:

import java.awt.*;
import java.awt.event.*;

public class ZFrame extends Frame
{
    private Zaehler zaehler;

    private Button plusButton;
    private Button rueckButton;
    private Label anzeige;

    // hier in die geschweiften Klammern der Klasse
    // kommen die folgenden Definitionen hinein
}

Innerhalb der gerade definierten Klasse erfolgt die Definition der inneren Klassen, die für die Funktionalität des ZFrame benötigt werden. Der ActionListener für die Buttons nimmt Bezug auf ein Objekt zaehler der Klasse Zaehler, von dem angenommen wird, dass es mittels seiner public Methoden die inhaltliche Arbeit für den Frame verrichtet:

class buttonListener implements ActionListener
{
    public void actionPerformed( ActionEvent e)
    {
        if( e.getActionCommand().equals( "weiter" ))
        {
            zaehler.raufzaehlen();
        }
        if( e.getActionCommand().equals( "zurueck" ))
        {
            zaehler.runterzaehlen();
        }
        anzeige.setText( zaehler.getZahl()+"");
    }
}

Diese Klasse Zaehler sollte im selben Verzeichnis vorhanden sein, oder sie muss importiert werden.

Der Konstruktor der Klasse ZFrame ruft als erstes den Konstruktor der Super-Klasse von ZFrame auf. Ausserdem:

public ZFrame( String Bezeichnung )
{
        super( Bezeichnung );

        zaehler = new Zaehler();
        plusButton = new Button("weiter");
        rueckButton = new Button("zurueck");
        anzeige = new Label("     1      " );

        setLayout( new FlowLayout());
        add( plusButton );
        add( anzeige );
        add( rueckButton );

        addWindowListener( new WAdapter());

        plusButton.addActionListener(new buttonListener());
        rueckButton.addActionListener(new buttonListener());
}

In main() wird ein Objekt der Klasse FZrame erzeugt, weitere Einstellungen werden vorgenommen, und mit der Methode show() wird die Anwendung angezeigt:

static public void main(String [] args )
{
        ZFrame zframe = new ZFrame( "rauf- und runterzählen");
        zframe.setSize( 234, 123);
        zframe.setResizable( false );
        zframe.show();
}

Übung:

Man editiere das Programm, indem man die o.g. Programmteile in die vorgesehene Stelle hineinkopiert; nach jedem Kopiervorgang ist zu kompilieren, damit man Fehlermeldungen zum frühestmöglichen Zeitpunkt erhält; schon die leere Klasse, die nur aus der ersten Zeile und leeren geschweiften Klammern besteht, kann kompiliert werden (auch wenn sie dann nicht lauffähig ist; aber es geht hier um das frühestmögliche Finden von Fehlern).
Package nicht vergessen!
Dokumentieren mit Javadoc (wie immer)!


www.AndreasGoedel.de