28.9 Eine Swing GUI zum Keller
 
  Die GUI-Klasse, die gleichzeitig den Keller testet, enthält keine Neuigkeiten, weshalb lediglich der Quelltext vorgestellt wird.
 
Download:
JKellerDemo. java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import adt.*;

public class JKellerDemo extends JFrame 
                         implements ActionListener {
  // Anfang Variablen
  JPanel zentrumPanel;
  JTextField eingabePush, ausgabe;
  JButton bPush, bIsEmpty, bPop, bTop;
  Keller keller;
  // Ende Variablen

  public JKellerDemo (String title) {
    // Frame-Initialisierung
    super (title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(300, 200);
    
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    
    zentrumPanel = new JPanel(new GridLayout(2,2,4,4));
    cp.add(zentrumPanel,BorderLayout.CENTER);

    // Anfang Komponenten
    eingabePush = new JTextField("0",12);
    cp.add(eingabePush,BorderLayout.NORTH);
    
    bPush = new JButton("push");
    zentrumPanel.add(bPush);
    bPush.addActionListener(this);
    
    bPop = new JButton("pop");
    zentrumPanel.add(bPop);
    bPop.setEnabled(false);
    bPop.addActionListener(this);
    
    bIsEmpty = new JButton("isEmpty");
    zentrumPanel.add(bIsEmpty);
    bIsEmpty.addActionListener(this);
    
    bTop = new JButton("top");
    zentrumPanel.add(bTop);
    bTop.setEnabled(false);
    bTop.addActionListener(this);
    
    ausgabe = new JTextField("");
    cp.add(ausgabe,BorderLayout.SOUTH);
    ausgabe.setEditable(false);
    
    // Ende Komponenten
    
    keller = new Keller();

    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void actionPerformed(ActionEvent e){
    Object obj = e.getSource();

    if (obj == (Object) bPush){
       keller.push(eingabePush.getText());
       bTop.setEnabled(true);
       bPop.setEnabled(true);
       ausgabe.setText(""+ keller.top()+" ist eingekellert!");
    }
    if (obj == bPop){
       ausgabe.setText(""+ keller.top()+
                           " wird vom Keller entfernt!");
       keller.pop();
       if (keller.isEmpty()){
         bPop.setEnabled(false);
         bTop.setEnabled(false);
       }
    }
    if (obj == bIsEmpty){
       if(keller.isEmpty())ausgabe.setText("Der 
                                   Keller ist leer");
       else ausgabe.setText("Der Keller ist nicht leer");
    }
    if (obj == bTop){
       ausgabe.setText("Oberstes Kellerelement ist: "+
                        keller.top());
    }
  }
  // Ende Ereignisprozeduren

  public static void main (String[] args) {
    new JKellerDemo("JKellerDemo");
  }
}
Ausgabe Nach dem Erzeugen einer Instanz des Kellers ist dieser leer, Die GUI erlaubt in diesem Fall nicht, dass die Buttons pop und top gedrückt werden können. Entsprechendes muss zugesichert werden, wenn der Keller geleert wird. Man beachte die entsprechenden Zeilen in der Methode actionPerformed(ActionEvent e). Ist ein Element eingekellert, so ändert sich das Aussehen der Buttons, ein Anklicken führt jetzt zu den gewünschten Ereignissen.

Hier ist im Eingabefeld das Wort 'test' eingegeben und danach das Push-Button gedrückt worden. Das Einkellern wird im Ausgabefeld kommentiert  und die Darstellung der Buttons ändert sich so, dass man erkennt, dass sie jetzt 'aktiv' sind.

 

zu 28.10. Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2004