# selektierter Datensatz in JList als String Datentyp



## Einklang. (10. Jul 2012)

Ich habe nun einen Datensatz in einer JList makieren können mit einen ActionListListener - jetzt möchte ich den Wert dieses selektierten Datensatzes als String auslesen - als int funktioniert es soweit......!

Wie kann ich einen selektierten Datensatz aus einer JList denn als String auslesen?
Dazu finde ich keine passende Lösung in der Api für JList......!

Danke


----------



## bERt0r (10. Jul 2012)

Mach das Tutorial durch, da bist du schneller und kennst dich dann auch aus: How to Use Lists (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Einklang. (10. Jul 2012)

Naja das beantwortet halt nicht meine Frage - leider ist in der API von JList keine Angabe, welche Methode den Wert in einen String umwandelt.......... und daher werde ich das auch nicht in dem Beispiel finden! ;-)

Würde ich jetzt nicht schon geschaut haben, würde ich mich wieder tagelang mit dem Beispiel rumschlagen ohne dort jemals auf eine Lösung zu stoßen - na vielen Dank!! 

Oder kannst du mir direkt sagen, wo dort in den Beispielen ein selektierter Wert als String ausgelesen wird - wo finde ich das???


----------



## Einklang. (10. Jul 2012)

Noch was Wichtiges als Nachtrag: 

Ich hab ja die MEthode "getSelectedValue" im Auge dafür, komm aber mit der Anwendung nicht so ganz klar.
JList (Java Platform SE 7 )

Was ist das mit "public E"? Wie verfahr ich da weiter, wo steht dann der Wert drin (was gebe ich zb. bei system.out.println(??) in die Klammer?


----------



## Michael... (10. Jul 2012)

Wie in einem anderen Post bereits erwähnt, erhält man mit der getSelectedValue() das aktuell selektierte Objekt. Wenn das Objekt ein String ist gibt es unzählige Möglichkeiten dies in einen String zu wandeln. Dies hat allerdings nichts mit JList zu tun. Methoden dazu liefert z.B. die Klasse String selbst (siehe API Doku String) oft reicht auch die toString() welche jedes Object besitzt. Wenn man "weiß" von welchem Typ das Objekt ist kann man als weitere Möglichkeit auch noch casten: 
	
	
	
	





```
String text = (String)selectedObject;
```


----------



## Michael... (10. Jul 2012)

Einklang. hat gesagt.:


> Was ist das mit "public E"? Wie verfahr ich da weiter, wo steht dann der Wert drin (was gebe ich zb. bei system.out.println(??) in die Klammer?


Das ist die generische Erweiterung der Klasse seit Java 7. Somit kann/sollte man direkt bei der Initialisierung angeben von welchem Typ die Objekte sind, die die JList beinhaltet. Die Methode getSelectedValue() liefert somit dann auch ein Objekt dieses Types zurück. Geht allerdings erst ab Java 7.


----------



## Einklang. (10. Jul 2012)

Ja danke gut erklärt - bringt mir aber jetzt nicht wirklich was! ;-) Ist irgendwie so wie im Englischunterricht wenn Grammatik erklärt wird und dann sich wundern warum keiner Englisch sprechen kann.......! Man besuche mal einen Kurs "Deutsch für Ausländer" - so hat niemand von uns Deutsch gelernt! :-D

Kann ich wieder irgendwas irgendwo herumsuchen ohne zu wissen wonach ich genau suche und ob es das richtige ist wenns mir begegnet.......! ;-)
Achja genau stimmt ja - ich kann nochmal 10 Fragen hier reinstellen, sonst würde man mirs ja zu einfach machen...! :-D


Also:


> Wenn das Objekt ein String ist gibt es unzählige Möglichkeiten dies in einen String zu wandeln. Dies hat allerdings nichts mit JList zu tun. Methoden dazu liefert z.B. die Klasse String selbst (siehe API Doku String) oft reicht auch die toString() welche jedes Object besitzt



Wenn ich sowas jetzt nehme, dann probier ich das mal aus (weil ich in den letzten zig Monaten ja doch irgendwie was mitbekommen hab - wobei ich mich ärgere was ich hätte alles mitbekommen können und nicht habe... dank solcher Erklärungen die mich wieder sinnlos beschäftigen) - dann mach ich sowas wie : 
	
	
	
	





```
object listeob = jlist.getselectedvalue();
String stringliste = listeob.toString()
```
 ?? 
Dann hab ich nämlich genau das Problem dass ich wieder einfach irgendwas mache - ob es Sinn macht oder nicht! Ich frag ja nicht hier damit ich einfach wieder irgendwas probiere, sondern um konkret ne Lösung zu haben die funktioniert - rumprobieren kann ich selber immer..... dafür brauchts kein Forum!

Also konkret bitte und keine Metainformationen sonst lern ich hier gar nix und eure Bemühungen (die wohl auch gut gemeint sind) verhallen im endlosen Raum des Internets......... ;-) (Metainformationen können erst fruchten wenn die konkreten Informationen da sind - obwohl mir klar ist dass heute allzu viele Leute von etwas reden wovon sie keine Ahnung haben...) ;-)


----------



## Michael... (10. Jul 2012)

Einklang. hat gesagt.:


> Also konkret bitte und keine Metainformationen


Hierbei handelt es sich nicht um Metainformationen, sondern um Grundlagen.
Wenn man sich mit der Java Programmierung beschäftigt sollte man sich irgendwann mit solchen Sachen beschäftigen (meiner Meinung: spätestens wenn man anfängt GUIs zu programmieren).
Klar kann man nicht sofort alles wissen, deshalb hab ich in dem Fall ja auch die Möglichkeiten, die es gibt aufgezeigt. Nun muss man sich aber selbst damit beschäftigen (in dem nachliest, Fragen stellt...) um heraus zu finden, was für den konkreten Zweck die geeigneteste Lösung/Vorgehensweise ist.

In Deinem konkreten Fall wäre es interessant zu wissen mit welcher Java Version bzw. für welche Java Version Du Dein Programm entwickelst


----------



## Einklang. (10. Jul 2012)

Java 7 Eclipse Indigo.

Naja ich hab eine LIste aus der ich dann ein Element selektieren möchte und mit dem Wert aus dem Element dann eine SQL Abfrage starten........ und das Ergebnis in einer weiteren JList anzeigen......!


----------



## Michael... (10. Jul 2012)

Ich selbst nutze kein Java 7 aber dann sollte doch 
	
	
	
	





```
JList<String> liste = new ....
```
 gehen und die Methode 
	
	
	
	





```
getSelectedValue()
```
 einen String liefern.


----------



## Einklang. (10. Jul 2012)

"String listestring = new list_1.getSelectedValue();"

liefert folgende Fehlermeldung: list_1 cannot resolved to a type........


----------



## Camino (10. Jul 2012)

Das 
	
	
	
	





```
new
```
 ist falsch und gehört da nicht hin.


```
Object myObject = list_1.getSelectedValue()
```
 liefert dir ein Object zurück. (Keine Ahnung, was für Objekte du in deine Liste gesteckt hast.) Und aus diesem Object musst du nun einen String machen (Stichwörter: cast oder evtl. toString-Methode).


----------



## Einklang. (10. Jul 2012)

Super so jetzt funktionierts:


```
list_1.addListSelectionListener(new ListSelectionListener() { 
			public void valueChanged(ListSelectionEvent event) {
				int index = list_1.getSelectedIndex();
				System.out.println(index);
				// Wert aus index herauslesen als String
				Object listobject = list_1.getSelectedValue();
				String objektstring = listobject.toString();
				System.out.println("Das Objekt: " + listobject);
				System.out.println(objektstring);
				// Neue SQL Abfrage mit dem String-Wert
				// Spalten und Datentyp der Spalte aus dem Ergebnis auflisten
				// SPalten und Datentyp in weitere JListen anzeigen
        	}});
```

Wieder was gelernt - diesmal über den Umgang mit Objekten......!
In den Kommentaren seht ihr schon meine nächsten Fragen ;-)! Jetzt muss ich mal schauen ob ich alles in dieser Methode mache oder eine neue anfangen muss usw....! 

Naja, bis später dann! ;-)


----------



## Einklang. (11. Jul 2012)

Jetzt hab ich zu diesem Code eine weitere Frage....

ich brauch den Wert in einer neuen Methode, also der SQL Abfrage. Am besten wär natürlich wenn die MEthode den String-Wert "objektstring" herausgeben würde.

Dieser Code zeigt jetzt den String-Wert der Selektion in einer JList an. Diesen Wert möchte ich jetzt für eine weiter SQL ABfrage nutzen und dann eine zweite JList darauf aufbauen......!

Im Grunde soll die Methode einfach nur schauen ob sicher der selektierte Datensatz ändern und diesen dann zurückgeben...!


----------



## Michael... (11. Jul 2012)

Einklang. hat gesagt.:


> Jetzt hab ich zu diesem Code eine weitere Frage....
> 
> ich brauch den Wert in einer neuen Methode, also der SQL Abfrage. Am besten wär natürlich wenn die MEthode den String-Wert "objektstring" herausgeben würde.


Die Listenermethode kann nichts zurück geben, Du müsstest den Wert also außerhalb des Listeners "speichern" -wenn das wirklich notwenig ist.
Wo bzw. wann wird denn die andere Methode aufgerufen?

Noch ein Hinweis zum ListSelectionListener:
Du solltest in der valueChanged() noch eine Überprüfung 
	
	
	
	





```
if(!e.getValueIsAdjusting())
```
 einbauen, da die Methode des Listeners bei Nutzeraktionen zweimal aufgerufen wird. siehe:
How to Use Lists (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Einklang. (11. Jul 2012)

Hm.........!

Also wie gesagt möchte ich mit dem gerade selektierten Datensatz eine SQL Abfrage machen und dann eine zweite Liste füllen. 
Das bedeutet, dass in der ersten JList eine Wahl getroffen wird und dann die weiteren Möglichkeiten in einer zweiten JList erscheinen..... eigentlich überall zu finden sowas........!

Wie lässt sich das denn realisieren, wenn ich den Wert gar nicht zurückbekomm?



> Du müsstest den Wert also außerhalb des Listeners "speichern" -wenn das wirklich notwenig ist.



Wie??????? das ist ja meine Frage..... ;-)


----------



## Michael... (11. Jul 2012)

Einklang. hat gesagt.:


> Also wie gesagt möchte ich mit dem gerade selektierten Datensatz eine SQL Abfrage machen und dann eine zweite Liste füllen.
> Das bedeutet, dass in der ersten JList eine Wahl getroffen wird und dann die weiteren Möglichkeiten in einer zweiten JList erscheinen..... eigentlich überall zu finden sowas........!


In dem Fall würdest Du die zweite Methode ja ohnehin aus dem Kontext der valueChanged aufrufen und hier hast Du den Wert ja verfügbar und kannst in dieser Methode übergeben. (abgesehen davon, dass man ja an jeder Stelle an der die JList bekannt ist, deren selectedValue() aufrufen kann)


Einklang. hat gesagt.:


> Wie lässt sich das denn realisieren, wenn ich den Wert gar nicht zurückbekomm?
> Wie??????? das ist ja meine Frage..... ;-)


Dann ist das gar nicht Dein Problem.


----------



## Einklang. (11. Jul 2012)

> die zweite Methode ja ohnehin aus dem Kontext der valueChanged aufrufen



was bedeutet das programmiertechnisch bzw überhaupt?



> abgesehen davon, dass man ja an jeder Stelle an der die JList bekannt ist, deren selectedValue() aufrufen kann



ja gut aber wenn er sich ändert? dann wird das erst bekannt wenn man das wieder abruft.... daher ja der listener, damit sich das immer direkt aktualisiert (sichtbar dann in der zweiten Liste,aber dafür muss der Wert in der ersten Liste ja schon da sein......)

Hm also wieder ein klarer Fall von Verklärung :-D!


----------



## Michael... (11. Jul 2012)

Einklang. hat gesagt.:


> was bedeutet das programmiertechnisch bzw überhaupt?


prinzipiell:

```
public void foo() {
    String s = "Hallo";
    bar(s);
}

public void bar(String text) {
    ...
}
```
Ich vermute mal, dass das nicht die Antwort auf Dein Problem ist. Eventuell schilderst Du mal Dein konkretes Problem und postest den Code mit dem Du es versucht hast zu lösen.


----------



## Einklang. (11. Jul 2012)

Hm kann ich nix mit den Beispielen anfangen - da steht ja nix mit valuechagned() usw....! 

Naja ich habs ja hier shcon mehrmals erklärt:

Ich hab eine Jliste und kann nun wie oben im Code zu sehen ist auch das selektierte Element ausgeben als String.
Mit diesem String wert möchte ich nun die SQL Datenbank abfragen nach Werten in einer Spalte - wo dieser String-Wert aus der ersten JList eben zu finden ist - und diese Werte dann in einer weiteren JList ausgeben/anzeigen.

Code gibts nicht, weil ich wie schon gesagt ich eben diesen STring-Wert nicht aus der Methode bekomm....!

Also String-Wert aus der Methode nehmen, SQL Abfrage starten und das Ergebnis in einer zweiten JList anzeigen.......!

;-)


----------



## Michael... (11. Jul 2012)

Einklang. hat gesagt.:


> Hm kann ich nix mit den Beispielen anfangen - da steht ja nix mit valuechagned() usw....!


Ein bisschen Transferleistung sollte doch wohl drin sein?


Einklang. hat gesagt.:


> Also String-Wert aus der Methode nehmen, SQL Abfrage starten und das Ergebnis in einer zweiten JList anzeigen.......!


Wie gesagt, muss der String auch gar nicht "aus" der Methode raus, da ja alles innerhalb eines "Ablaufs" passieren soll.

```
...
public void valueChanged(ListSelectionEvent event) {
    if(!event.getValueIsAdjusting()) {
        //Lesen des selektierten Wertes aus der JList list_1 und speichern in die Variable selectedValue
        String selectedValue = list_1.getSelectedValue().toString();
        
        //Kontrollausgabe der Selektion auf der Konsole
        System.out.println(selectedValue);
        
        //Aufruf der Methode zur Datenbankabfrage und Aktualisierung der zweiten Liste
        executeQueryAndRefreshDataOfList2(selectedValue);
    }
}
...
```
Ich ahne schon die nächste Frage...


----------



## Wurzelsepp (11. Jul 2012)

Warum nicht mal mit den Grundlagen beschäftigen. Es kann doch nicht sein, dass fast jeder Thread mit dir 



> Ja danke gut erklärt - bringt mir aber jetzt nicht wirklich was!



enthält. Irgendwie programmierst du anscheinend weit über deinen augenblicklichen Möglichkeiten.


----------



## Einklang. (11. Jul 2012)

> Ich ahne schon die nächste Frage...



Hmmm jetzt ist mir eigentlich klar wie es gemeint ist...... mal sehen ob alles so klappt! 

Danke


----------



## Einklang. (11. Jul 2012)

Wurzelsepp hat gesagt.:


> Warum nicht mal mit den Grundlagen beschäftigen. Es kann doch nicht sein, dass fast jeder Thread mit dir
> 
> 
> 
> enthält. Irgendwie programmierst du anscheinend weit über deinen augenblicklichen Möglichkeiten.



Einfach nicht hingucken wenns nicht gefällt, wir leben in nem freien Land....... :toll:


----------

