
/**
 * Stellt das Fenster dar, in dem der Baum dargestellt wird.
 * Sie müssen die abstrakten Methoden der Oberklasse mit Inhalt füllen.
 * 
 * @author Rainer Helfrich
 * @version Oktober 2020
 */
public class EntscheidungsFrame extends EntscheidungsFrameBase
{
    /**
     * Der Entscheidungsbaum, der durchlaufen werden soll.
     */
    private Binaerbaum<String> baum;

    /**
     * Erzeugt ein neues Fenster
     * @param baum Der Entscheidungsbaum, der durchlaufen werden soll
     */
    private EntscheidungsFrame(Binaerbaum<String> baum)
    {
        this.baum = baum;
        displayCurrent();
    }

    /**
     * Erzeugt einen Entscheidungsbaum und übergibt ihn an ein Fenster
     * Dann wird das Fenster geöffnet
     */
    public static void entscheidungsbaumTesten()
    {
        Binaerbaum<String> meinBaum = null;
        //# Hier muss meinBaum auf einen Entscheidungsbaum gesetzt werden

        
        //# der folgende Aufruf muss stehen bleiben
        new EntscheidungsFrame(meinBaum);
    }

    /**
     * Wird ausgeführt, wenn der Benutzer auf "Ja" klickt.
     * Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
     */
    protected void jaGeklickt()
    {
    }

    /**
     * Wird ausgeführt, wenn der Benutzer auf "Nein" klickt.
     * Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
     */
    protected void neinGeklickt()
    {
    }

    /**
     * Prüft, ob der aktuelle Knoten ein Blattknoten ist und wir damit bei einer Lösung angekommen sind.
     * @return true, wenn es sich beim aktuellen Knoten um einen Blattknoten handelt; false sonst
     */
    protected boolean istLoesung()
    {
        return true;
    }

    /**
     * Gibt den Wert des momentan ausgewählten Knotens im Entscheidungsbaum zurück
     * @return Die Beschreibung am aktuellen Knoten
     */
    protected String aktuellerText()
    {
        return "<nächste Frage>";
    }
}
