addListSelectionListener wie nutze ich das Ergebmis

Rockfreak

Mitglied
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?
 
S

SlaterB

Gast
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

Mitglied
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.
 
S

SlaterB

Gast
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

Mitglied
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.
Java:
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);
			}
		 });
 
S

SlaterB

Gast
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

Mitglied
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!
 

Rockfreak

Mitglied
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.
 
S

SlaterB

Gast
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
 
S

SlaterB

Gast
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
 
S

SlaterB

Gast
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:
Java:
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

Mitglied
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 :D

Danke dir!
 

Rockfreak

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

Java:
x=e.getFirstIndex();
so geht's nicht
Java:
x=list.getSelectedIndex();
so gehts

Danke für die Denkanstöße :)
 

Ähnliche Java Themen


Oben