import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.TableModelEvent;
import java.io.*;


public class CDAnwendung extends JFrame {
  // Attribute der Applikation/Anwendeung
  // die MenueZeile, an die die Menues gehaengt werden sollen
  JMenuBar dieMenuezeile = new JMenuBar();
  // Das "Datei"-Menue , an welches Menue-Punkte gehaengt werden sollen
  JMenu dateiMenue = new JMenu();
  // 2 Menuepunkte die fuer das Datei-Menue gedacht sind, wie man an dem 
  // gewaehlten Namen der Variablen vom Typ JMenuItem sieht.
  JMenuItem dateiOeffnenMenuepunkt = new JMenuItem();
  JMenuItem dateiBeendenMenuepunkt = new JMenuItem();
  // Das "Bearbeiten"-Menue , an welches Menue-Punkte gehaengt werden sollen
  JMenu bearbeitenMenue = new JMenu();
  // ein Menuepunkt fuer das "Bearbeiten"-Menue
  JMenuItem bearbeitenKopierenMenuepunkt = new JMenuItem();
  JLabel derText = new JLabel();

  //Das Scroll-Feld fuer die Tabelle
  JScrollPane ScrollFeld = new JScrollPane();

  // Die Tabelle in der die CDs angezeigt werden sollen:
  JTable CDTabelle = new JTable();

  // Das Tabellenmodell, welches die Eigenschaften der Tabelle festlegt.
  // Das Tabellenmodell muss von uns in der entprechenden Klassendatei "CDTableModel.java"
  // festgelegt werden.
  CDTableModel unserTabellenModell;

  // Der Konstruktor, der die Methode/Prozedur jbInit
  // aufruft, die weiter unten ausprogrammiert ist.    
  public CDAnwendung() {
      jbInit();
      }

  // Die Main-Methode 
  public static void main(String[] args) {
    CDAnwendung meineCDAppli= new CDAnwendung();
    }

  // 
  private void jbInit() {
    // Fenstergroesse festlegen
    setSize(300,250);
    //  Die erscheinenden Texte der Menuepunkte festlegen
    dateiMenue.setText("Datei");
    dateiOeffnenMenuepunkt.setText("Öffnen");
    dateiBeendenMenuepunkt.setText("Beenden");

    // Dieser Code ist aus Aufgabe 1 neu hinzugekommen
    // Er verbindet den Menüpunkt "Beenden" mit einer Operation
    dateiBeendenMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        dateiBeendenMenuepunkt_actionPerformed(e);
      }
    });
    // Ende neuer Code aus Aufgabe 1

    bearbeitenMenue.setText("Bearbeiten");
    bearbeitenKopierenMenuepunkt.setText("Neue CD anlegen...");
    // Den Menuepunkt "Neue CD anlegen..." mit einer Aktion belegen.
    // Bei einem Menueaufruf wird die unten selbst programmierte Methode
    // bearbeitenKopierenMenuepunkt_actionPerformed(e) aufgerufen !!
    bearbeitenKopierenMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        bearbeitenKopierenMenuepunkt_actionPerformed(e);
      }
    });
    // Das Layout des Zeichenbereichs auf kein (null) Layout setzen.
    getContentPane().setLayout(null);
    // Menue-Zeile dem Fenster hinzufuegen 
    setJMenuBar(dieMenuezeile);

    derText.setText("Nichts ist passiert");
    derText.setBounds(new Rectangle(10, 120, 199, 17));

    // Die Menuestruktur aufbauen ...
    dieMenuezeile.add(dateiMenue);
    dieMenuezeile.add(bearbeitenMenue);
    dateiMenue.add(dateiOeffnenMenuepunkt);
    dateiMenue.addSeparator();
    dateiMenue.add(dateiBeendenMenuepunkt);
    bearbeitenMenue.add(bearbeitenKopierenMenuepunkt);

    this.getContentPane().add(derText, null);
    
    // Die Groesse des Feldes, auf welches die Tabelle gesetzt werden soll, festlegen:
    ScrollFeld.setBounds(new Rectangle(10, 10, 200, 100));
    // das ScrollFeld dem Fenster hinzufuegen 
    this.getContentPane().add(ScrollFeld);
    // Zeichenbereich des  ScrollFeldes bestimmen und die Tabelle darauf hinzufuegen
    ScrollFeld.getViewport().add(CDTabelle);

    // Das Tabellenmodel anlegen. Die Klasse CDTableModel legt die Eigenschaften der 
    // Tabelle fest. Siehe auch CDTableModel.java

    unserTabellenModell = new CDTableModel();
    CDTabelle.setModel(unserTabellenModell);

    this.setVisible(true);
  }

  void bearbeitenKopierenMenuepunkt_actionPerformed(ActionEvent e) {
    // eine neue, leere CD zur Bearbeitung anlegen
    CD testCD = new CD();
    // den Bearbeitungsdialog für diese CD aufrufen
    CDInputDialog myDialog = new CDInputDialog(testCD);
    // den Dialog modal setzen
    myDialog.setModal(true);
    // und anzeigen
    myDialog.setVisible(true);
    // nach der Bearbeitung zeigen wir den Titel an
    derText.setText(testCD.getTitel());
  }

// Dieser Code ist aus Aufgabe 1 neu hinzugekommen
// Er beschreibt die Operation "Beenden" des Menues
void dateiBeendenMenuepunkt_actionPerformed(ActionEvent e) {
     // Programm beenden
     System.exit(0);
  }
// Ende neuer Code aus Aufgabe 1

}

