
/**
 * Die Bedienoberfl&auml;che f&uuml;r den Laufzeittest.
 * 
 * @author ISB-Arbeitskreis, Umsetzungshilfen Informatik 12 
 * @version 1.0
 */

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

class OBERFLAECHE implements OBERFLAECHENINTERFACE
{

    private JFrame fenster;
    private JTextField datenAnzahl;
    private JTextField versuchsAnzahl;
    private JLabel suchzeitListe;
    private JLabel suchzeitBaum;
    private JCheckBox listeSuchen;
    private JCheckBox baumSuchen;
    private JButton testen;
    private JButton beenden;
    private KONTROLLEURINTERFACE kontrolleur;
    
    /**
     * Legt die Oberfl&auml;chenelemente an und setzt den Kontrolleur.
     * @param kontrolleur der verwaltende Kontrolleur
     */
    OBERFLAECHE (KONTROLLEURINTERFACE kontrolleur)
    {
        this. kontrolleur = kontrolleur;
        FensterAufbauen ();
    }
    
    /**
     * F&uuml;hrt den Aufbau der Oberfl&auml;chenelemente durch.
     */
    private void FensterAufbauen ()
    {
        JPanel content;
        JPanel p;
        JLabel l;
        fenster = new JFrame ("Suchmethoden testen");
        content = (JPanel) fenster. getContentPane ();
        content. setLayout (new BorderLayout ());
        p = new JPanel ();
        content. add (p, BorderLayout. NORTH);
        p. setLayout (new GridLayout (5, 2));
        l = new JLabel ("Anzahl der Datenelementein der Liste bzw. im Baum");
        p. add (l);
        datenAnzahl = new JTextField ();
        p. add (datenAnzahl);
        l = new JLabel ("Anzahl der durchzuf\u00FChrenden Suchvorg\u00E4nge");
        p. add (l);
        versuchsAnzahl = new JTextField ();
        p. add (versuchsAnzahl);
        l = new JLabel (" ");
        p. add (l);
        l = new JLabel (" ");
        p. add (l);
        l = new JLabel ("Mittlere Suchzeit in der Liste [Nanosekunden]");
        p. add (l);
        suchzeitListe = new JLabel ("---");
        p. add (suchzeitListe);
        l = new JLabel ("Mittlere Suchzeit im Baum [Nanosekunden]");
        p. add (l);
        suchzeitBaum = new JLabel ("---");
        p. add (suchzeitBaum);
        
        p = new JPanel ();
        content. add (p, BorderLayout. SOUTH);
        p. setLayout (new FlowLayout ());
        listeSuchen = new JCheckBox ("Suchen in der Liste testen", true);
        p. add (listeSuchen);
        baumSuchen = new JCheckBox ("Suchen im Baum testen", true);
        p. add (baumSuchen);
        testen = new JButton ("Test ausf\u00FChren");
        p. add (testen);
        testen. addActionListener (new ActionListener ()
        {
            public void actionPerformed (ActionEvent e)
            {
                if (listeSuchen. isSelected () || baumSuchen. isSelected ())
                {
                    try
                    {
                        kontrolleur. SuchenAusfuehren (Integer. parseInt (datenAnzahl. getText ()), Integer. parseInt (versuchsAnzahl. getText ()), listeSuchen. isSelected (), baumSuchen. isSelected ());
                    }
                    catch (Exception ex)
                    {
                        JOptionPane. showMessageDialog (fenster, "Bitte korrekte Zahlenwerte angeben.", "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
                    }
                }
                else
                {
                    JOptionPane. showMessageDialog (fenster, "'Suche in der Liste' oder 'Suche im Baum' muss aktiviert sein.", "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        beenden = new JButton ("Beenden");
        p. add (beenden);
        beenden. addActionListener (new ActionListener ()
        {
            public void actionPerformed (ActionEvent e)
            {
                kontrolleur. BeendenAusfuehren ();
            }
        });
        
        fenster. setSize (new Dimension (700, 200));
        fenster. setMinimumSize (new Dimension (300, 200));
        fenster. setPreferredSize (new Dimension (700, 200));
        fenster. setVisible (true);        
    }
    
    /**
     * Tr&auml;gt die Suchzeit f&uuml;r die Suche in der Liste ein.
     * @param zeit ben&ouml;tigte Suchzeit
     */
    public void ListenSuchzeitSetzen (String zeit)
    {
        suchzeitListe. setText (zeit);
    }
    
    /**
     * Tr&auml;gt die Suchzeit f&uuml;r die Suche im Baum ein.
     * @param zeit ben&ouml;tigte Suchzeit
     */
    public void BaumSuchzeitSetzen (String zeit)
    {
        suchzeitBaum. setText (zeit);
    }
}
