import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.FileDialog;
import java.util.Vector;

/**
 * Test von Listenfeldern
 * Einführung in die GUI
 * @author Manuel Friedrich 
 * @version 2006-02-16
 */
public class Liste extends JFrame
{
    JLabel m_tText;  // Text zur Anzeige des aktuell ausgewählten Listeneintrags
    JList m_verzeichnis;  // Das Listenfeld
    Vector data;  // Eine Sammlung vergleichbar ArrayList für die Listeneinträge

    // Ereignisbehandlung für das Fenster
    class CMeinWindowLauscher extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
      {
      System.exit(0);
      }
    }
    
    // Ereignisbehandlung für Klicks auf die Liste
    class CMeinListenLauscher implements ListSelectionListener
    {
    
    // Bei jedem Klick wird diese Methode aufgerufen
    public void valueChanged(ListSelectionEvent e){
      int i=m_verzeichnis.getSelectedIndex();
       m_tText.setText((String) m_verzeichnis.getSelectedValue());
    }
    }
    
    /**
     * Konstruktor
     */
    public Liste(String titel)
    {
    super(titel);
    m_tText=new JLabel();   //Instanz des Textes erzeugen
    JPanel panel1=new JPanel();   // Instans eines Panels erzeugen, dieser Container dient zur Aufnahme der Liste samt Scrollbar
    // Listen erzeugen und vier Daten eintragen
    data=new Vector();
    data.add("one");
    data.add("two");
    data.add("three");
    data.add("four");
    // Liste erzeugen und mit dem Vector füllen
    m_verzeichnis=new JList(data);
    // 3-D-Effekt für Listenfeld festlegen
    m_verzeichnis.setBorder(new BevelBorder(BevelBorder.LOWERED));
    
    // nur eine Auswahl soll möglich sein
    m_verzeichnis.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    
    // Die Scrollleiste wird erzeugt und an ein ScrollPane angegliedert
    JScrollPane listenScrollPane = new JScrollPane(m_verzeichnis);
    // Die Größe des sichtbaren Bereichs wird festgelegt
    listenScrollPane.setPreferredSize(new Dimension(170,200));
   
    // Nulllayout für das Fenster festlegen
    getContentPane().setLayout(null);

    // Größe des Panels festlegen
    panel1.setBounds(10,30,200,800);
    // Größe des Textes festlegen
    m_tText.setBounds(230,30,200,10);
 
     // Liste und ScrollPanel in das Panel aufnehmen
     panel1.add(listenScrollPane);
     // das Panel in das Fenster aufnehmen
     getContentPane().add(panel1);
     // Text in das Fenster aufnehmen
     getContentPane().add(m_tText);

    
    // Fenster bei Window-Lauscher anmelden
    addWindowListener(new CMeinWindowLauscher());

    //Liste bei Listen-Lauscher anmelden
    m_verzeichnis.addListSelectionListener(new CMeinListenLauscher());

    }
    
    
    // Hauptfunktion
    public static void main(String[] args)
    {
    // Erzeugen eines Fensters
    Liste  Fenster=new Liste("Schiller CMS");
    // Größe soll nicht veränderbar sein
    Fenster.setResizable(false);
    
    Fenster.pack();
    Fenster.setSize(660,420);
    Fenster.show();
    
    // Nachträglich noch Listeneinträge ändern 
    // zuerst Einträge im Vektor verändern
    for (int i=0; i<10; i++)    Fenster.data.add(i+": five");  

        
    
    // Listenfelder aktualisieren
    Fenster.m_verzeichnis.setListData(Fenster.data);
    // Auswahl auf den ersten Eintrag setzen
    Fenster.m_verzeichnis.setSelectedIndex(0);    
    // Fenster neu zeichnen
    Fenster.repaint();
    
    
    
    }
    
  
    
}

	