# addListSelectionListener wie nutze ich das Ergebmis



## Rockfreak (5. Jan 2011)

Ich schreiben einen kleinen MP3 Player und ich gebe die selectierten Songs in einer Jlist aus und kann die Songs auch mit addListSelectionListener selectieren. Ich kann nur mit dem mitgelieferten Wert so nichts anfangen. Wie kann ich denn zurückgegeben Wert speichern und dann natürlich auch in meinem Player anspielen?


----------



## SlaterB (5. Jan 2011)

im Listener hast du den Wert und kannst dann damit beliebige Sachen machen,
von dort aus kannst du eine oder 1 Mio. Zeilen Code ausführen, du kannst den Wert speichern oder was auch immer

so wie du an jeder beliebigen anderen Programmstelle mit beliebigen Informationen beliebige Dinge anstellen kannst,
der Listener unterscheidet sich da in gewisser Weise nicht von anderen Stellen,

das besondere ist nur dass du den selber nie aufrufst sondern zu unbekannter Zeit automatisch drankommt, nämlich nach entsprechenden User-Aktionen


----------



## Rockfreak (5. Jan 2011)

javax.swing.event.ListSelectionEvent[ source=javax.swing.JList[,400,10,250x80,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=50331936,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=33,g=98,b=206],selectionForeground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255],visibleRowCount=8,layoutOrientation=0] firstIndex= 1 lastIndex= 1 isAdjusting= false ]


das ist ja das was er mir ausgibt, wenn ich was in meiner Liste anklicke und damit kann ich halt gar nichts anfange. Dafür reichts halt noch nicht...
Was muss man denn machen. damit man einfach den Pfad zu dem File aus der Liste bekommt.


----------



## SlaterB (5. Jan 2011)

schaue dir die Methoden des Events an oder frage unabhängig davon die JList nach dem aktuell selektierten Element/ Index,
auch das ist wieder ein Befehl, den man nachschlagen muss, aber irgendein Beispiel zur Verwendung solltest du dir eh vorher anschauen

daneben interessant ist übrigens evtl. die Methode getValueIsAdjusting() im Event,
es kann sein dass ein Event für die Deselektierung des alten Elements kommt + ein Event für die neue Selektierung, beide quasi zeitgleich


----------



## Rockfreak (5. Jan 2011)

Ich suche je gerade ein Beispiel aber es ist schwer eins zu finden.
Ich finde zwar diverse Befehle aber leider keine Beispiele wie man diese einbaut um eben an den Wert zu kommen den ich benötige.
Sieht bisher bei mir so aus.

```
list.addListSelectionListener(new ListSelectionListener()			// Selectierung in der Liste
		
		{
			@Override public void valueChanged(ListSelectionEvent e)
			{
				if (e.getValueIsAdjusting())
					return;
				System.out.println(e);
				
				if ("Ende".equals(fileNameArray.length))
					System.exit(0);
			}
		 });
```


----------



## SlaterB (5. Jan 2011)

Suche: ListSelectionListener example

erster Link 
How to Write a List Selection Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
ist zwar gleich ne Menge, eher ne Stunde als 5 Min. zu lesen, aber dann weiß man auch gleich ne Menge

in jedem Fall kommt man dort am Beispiel vorbei wo u.a.
> int firstIndex = e.getFirstIndex();
drinsteht,
jetzt hast du den Index und musst höchstens noch das Element zum Index bestimmen, das wird dort zwar leider nicht gemacht,
ist es aber so schwer jetzt irgendwo nach einer Methode 'gibElementZumIndex' zu schauen?

und es gibt natürlich noch 999 anderen Sucherergebnisse,
im zweiten Link
Selecting JList Sample : ListSwing JFCJava
ist schon eine Möglichkeit zu sehen, bisschen kompliziert mit Arrays wegen möglicher Mehrfachselektion,
aber wird für ein Element auch funktionieren


----------



## Rockfreak (5. Jan 2011)

Schon vielen Dank für die vielen Denkanstöße...
Es klappt soweit mit dem Index auslesen und denn dann als Index für das Array mit den Liedern nehmen. Nur wenn ich dann wieder zurück gehe in der Liste, stimmen die Indexwerte nicht mehr überein!


----------



## SlaterB (5. Jan 2011)

besteht noch eine Frage?
'zurück in die Liste gehen' klingt merkwürdig


----------



## Rockfreak (5. Jan 2011)

Wenn ich fünf Listenelemente habe, dann zeigt er mir beim 5. auch index 4 an. Wenn ich dann auf das 2. klicke kommt auch index eins aber wenn ich dann weitergehe, wiederholt er index eins und bei allen weiteren ist er immer einen index tiefer als er sein sollte.


----------



## SlaterB (5. Jan 2011)

klingt ja abenteuerlich, hat das aber was mit 'zurück' zu tun oder sind nur generell die Indexe nicht passend zu eigentlich ausgewählten Element?
ein komplettes Test-Programm wäre wohl günstig,

zu beachten ist dass JList und ähnliche Komponenten mit Unterscheidung komplett gleicher Einträgen Probleme haben,
da kenne ich auch ähnliche Probleme


----------



## Rockfreak (5. Jan 2011)

Noch mal ne blöde Frage von mir:
Was meinst du mit kompletten Testprogramm?


----------



## SlaterB (6. Jan 2011)

Java-Tags, public class Xy mit main-Methode usw., alles hier posten, möglichst unter 100 Zeilen (kürzen ist erlaubt solange die Fehler-Funktion drin bleibt), jemand anderes kopiert den Quelltext und kann dann das Programm ausführen


----------



## Rockfreak (8. Jan 2011)

Um es am einfachsten zu machen, hab ich mal die src komplett gezippt und hochgeladen.
Bin noch nicht so fit um das so zu komprimieren, dass man nur den Fehler sieht und es dann hier noch übersichtlich wird.

www.rockfreak.de/mp3player.zip


----------



## SlaterB (8. Jan 2011)

ganz schön anstrengend, du nennst nicht mal die benötigten Libraries oder wie das Programm zu bedienen ist,
ein ganzes Verzeichnis auszuwählen um dann mehrere MP3s zur Auswahl zu haben, habe ich auf normalen Weg auch nicht geschafft sondern manuell ein festes Verzeichnis eingetragen 

aber weil schon so viel gepostet wurde will ich mal nicht zu sehr meckern, den Fehler konnte ich nachvollziehen, tritt übrigens auch in einfachen Testprogrammen auf, sowas hier hättest du posten können:

```
public class TestGUI extends JFrame {
	public TestGUI() {
		DefaultListModel m = new DefaultListModel();
		m.addElement("a");
		m.addElement("b");
		m.addElement("c");
		m.addElement("d");
		m.addElement("e");
		final JList l = new JList(m);
		add(l);
		l.addListSelectionListener(new ListSelectionListener() {
			@Override
			public void valueChanged(ListSelectionEvent e) {
				System.out.println(e.getFirstIndex() + ", " + e.getLastIndex()
						+ ", l: " + l.getSelectedIndex() + ", "
						+ e.getValueIsAdjusting());
			}
		});
		setSize(300, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	public static void main(String[] args) {
		new TestGUI();
	}
}
```
bei einfachen Elementen a, b, c genau dasselbe Phänomen wie mit komplizierten MP3s, immer einfach denken und separat testen!
eine direkte Lösung kann ich leider auch nicht nennen, firstIndex/lastIndex scheint für sich nicht brauchbar,

wie oben schon erwähnt kann man aber die Liste direkt nach der Selektion fragen, habe ich in mein Beispiel auch schon eingebaut,
verwende das, dann kommst du zumindest weiter


----------



## Rockfreak (8. Jan 2011)

ja vielen Dank. Das hilft mir insofern weiter, dass ich anhand der Indexe sehen kann, dass diese Stimmen nur eben die ausgabe der Titel nicht. Aber da kann ich bestimmt noch was finden oder das Problem bei meiner Unipräsentation umgehen 

Danke dir!


----------



## Rockfreak (8. Jan 2011)

So jetzt gehts... könnte mir wieder mal selbst auf den Kopf hauen..


```
x=e.getFirstIndex();
```
so geht's nicht

```
x=list.getSelectedIndex();
```
so gehts

Danke für die Denkanstöße


----------

