/* B E S C H R E I B U N G
Verwendung einer Liste JList in der GUI
Diese benutzt ein Objekt der Klasse Vector
*/

package jlist1;

import java.awt.*;
//import java.awt.event.ActionEvent;
//import java.awt.event.ActionListener;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;


public class MainJList1 {
    public static void main(String[] args) {
	MyFenster myf = new MyFenster();
	myf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

class MyFenster extends JFrame{
    // Ein Vector ist ein dynamisches Array
    private Vector v = new Vector();
    // Stelle in MyFenster deklarieren, an die montiert wird.
	private Container mycont;


	// Eine Zeichenfläche deklarieren
	private JPanel myp;
	private GridLayout myGL12;

    private WanzeListe wl;

	// Konstruktor
	public MyFenster(){
        v.add("Apfel");
        v.add("Orange");
        v.add("Maracuja");
        v.add("Birne");
        v.add("Tulpe");
        v.add("Wolke");
        v.add("Hund");
        // Eine Liste auf dem Bildschirm
        JList myListe = new JList(v);
        // Liste mit Werten belegen
        myListe.setListData(v);
        wl = new WanzeListe();
        myListe.addListSelectionListener(wl);
        // myListe.addMouseListener(wl);

		// Liefert die Stelle in MyFenster, an die montiert wird.
		mycont = getContentPane();

		myp = new JPanel();

        // Erzeugt ein Layout
        myGL12 = new GridLayout(1,2);

        myp.setLayout(myGL12);

        // damit wird NICHT gescrollt:
        // myp.add(myListe);

        // damit wird aber gescrollt:
        myp.add(new JScrollPane(myListe));
        myp.add(new JLabel("  Bitte links etwas auswählen"));

        // Montiert die Zeichenfläche in das Fenster MyFenster
		mycont.add(myp);
		// Fensterüberschrift festlegen
		setTitle("Meine Zeichnung");
		// Koordinaten des linken, oberen Ecks des Fensters festlegen
		// Koordinate x = 30, Koordinate y = 60.
		setLocation(30,60);
		// Die Breite des Fensters in x-Richtung = 600
		// Die Breite des Fensters in y-Richtung = 400
		setSize(600,400);
		// Macht das Fenster sichtbar
		setVisible(true);
	}

}


/*
Wenn ein Listeneintrag angeklickt wird und dann wieder losgelassen wird,
wird jeweils ein Ereignis ausgelöst, also insgesamt 2.
Deshalb muss me.getClickCount() verwendet werden.

Alternative Möglichkeit:
class WanzeListe extends MouseAdapter {
    public void mouseClicked(MouseEvent me){
        JList list = (JList)(me.getSource ());
        if (me.getClickCount() == 2) {
            int index = list.locationToIndex(me.getPoint());
            System.out.println("index= " + index);
        }
    }
}
*/


/*
Wenn ein Listeneintrag angeklickt wird und dann wieder losgelassen wird,
wird jeweils ein Ereignis ausgelöst, also insgesamt 2.
Deshalb muss se.getValueIsAdjusting() verwendet werden.
*/
class WanzeListe implements ListSelectionListener{
    public void valueChanged( ListSelectionEvent se ) {
        JList list = (JList)(se.getSource ());
        if (se.getValueIsAdjusting()==false) {
            int index = list.getSelectedIndex();
            System.out.println("index= " + index);
        }
    }
}


