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

/**
 * Das Fenster, in dem der Entscheidungsbaum durchlaufen wird
 * Hier sollte nichts geändert werden.
 * 
 * @version 1.0 vom 26.10.2020
 * @author Rainer Helfrich
 */

public abstract class EntscheidungsFrameBase extends JFrame {

    private JTextArea jTextArea1 = new JTextArea("");
    private JScrollPane jTextArea1ScrollPane = new JScrollPane(jTextArea1);
    private JButton bJa = new JButton();
    private JButton bNein = new JButton();

    
    public EntscheidungsFrameBase() 
    { 
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 537; 
        int frameHeight = 312;
        setSize(frameWidth, frameHeight);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        setLocation(x, y);
        setTitle("Entscheidungsbaum");
        setResizable(false);
        Container cp = getContentPane();
        cp.setLayout(null);

        jTextArea1ScrollPane.setBounds(8, 8, 505, 217);
        jTextArea1.setEditable(false);
        cp.add(jTextArea1ScrollPane);
        bJa.setBounds(8, 232, 249, 33);
        bJa.setText("Ja");
        bJa.setMargin(new Insets(2, 2, 2, 2));
        bJa.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    jaGeklickt();
                    displayCurrent();
                }
            });
        cp.add(bJa);
        bNein.setBounds(264, 232, 249, 33);
        bNein.setText("Nein");
        bNein.setMargin(new Insets(2, 2, 2, 2));
        bNein.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    neinGeklickt();
                    displayCurrent();
                }
            });
        cp.add(bNein);
        
        setVisible(true);
    } 
    
    protected void displayCurrent()
    {
        jTextArea1.setText(aktuellerText());
        bJa.setEnabled(!istLoesung());
        bNein.setEnabled(!istLoesung());
    }

    /**
     * Gibt den Wert des momentan ausgewählten Knotens im Entscheidungsbaum zurück
     * @return Die Beschreibung am aktuellen Knoten
     */
    protected abstract String aktuellerText();
    
    /**
     * Wird ausgeführt, wenn der Benutzer auf "Ja" klickt.
     * Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
     */
    protected abstract void jaGeklickt();

    /**
     * Wird ausgeführt, wenn der Benutzer auf "Nein" klickt.
     * Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
     */
    protected abstract 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 abstract boolean istLoesung();
} 
