# JList: Eintrag anklicken & JTextfield mit Text aus MySQL füllen? (Screenshot dabei)



## chucknorris (25. Mai 2009)

Hallo,

ich habe ein für mich bisher ungelöstet Problem:

Links habe ich eine JList, die bereits aus der Datenbank Einträge mittels Vector einließt:


```
final Vector liste = new Vector();
	...
while (rs.next()) {
		liste.add( rs.getString(1)  + " " + rs.getString(3) );
		final JList JListe = new JList(liste);
```

Es darf immer nur 1 Eintrag ausgewählt sein. Wenn ich nun einen Eintrag auswähle (in diesem Falle ein Name), möchte ich die *rechts stehenden Textfelder* mit weiteren Daten aus der MySQL-Datenbank *füllen*. 

Wie funktioniert das? (Siehe auch Screenshot)

Nochmal in kurzen Worten: JList Eintrag anklicken > Textfelder werden mit Informationen befüllt (MySQL).



Gruß


----------



## Gast2 (25. Mai 2009)

Ich hoffe/denke du hast eine Klasse Person und die lädst du in die JList rein und dann wenn der Benutzer auf den Namen klickt dann zeigt er einfach die restlichen Daten an


```
txtFeld.setText(person.getName);
```

usw.


----------



## chucknorris (25. Mai 2009)

Es muss eine Prüfung stattfinden, welche Person aus der JList ausgewählt wurde.

Die Daten in der JList kommen direkt aus der DB, gespeichert in einem Vektor.
Sobald ich etwas in der Liste auswähle passiert z.B. sowas:

_WENN id x ausgewählt,
aktualisiere SELECT-Abfrage mit id x,
alle Textfelder haben setText(resultset("Name, usw."))_

Die treibende Komponente ist also immer die ID in der Tabelle.

Ich habe Probleme mit der Zusammenarbeit zwischen Jlist(Vector) und den Textfeldern.

Gruß


----------



## Gast2 (25. Mai 2009)

Versteh ich nicht warum du extra nochmal ein select machen willst???
Ich würde einfach gleiche alle Personen in die JList laden und dann wenn geklickt wurde einfach nur noch die getMethoden von Person aufrufen und dann in den Textfelder anzuzeigen...


----------



## Geeeee (25. Mai 2009)

aber ein SelectionListener ist schon drin?!


----------



## chucknorris (25. Mai 2009)

Also so sieht bisher mein Konzept aus:


```
final Vector liste = new Vector();
		ConnectMySQL db = ConnectMySQL.getInstance();
		ResultSet rs = db.query("SELECT * FROM TabellePersonen");
		         while (rs.next()) {
		        	 liste.add( rs.getString("id")  + " " + rs.getString("Name") + " " + rs.getString("Vorname") ); 
		final JList WahllokalListe = new JList(liste);
```

In der JList werden nur vereinzelte Attribute aus der DB angezeigt: ID, Name, Vorname 
Wenn ich auf einen Eintrag klicke, dann passiert folgendes durch meinen Listener:


```
public void valueChanged(ListSelectionEvent arg0) {
							
		    	int getID = 0; 
// getID: Wie bekomme ich den ID-Wert aus dem Vectoreintrag heraus?!
 
		    	ConnectMySQL db = ConnectMySQL.getInstance();
			ResultSet rs = db.query("SELECT * FROM TabellePersonen WHERE ID='"+getID+"'");
		   
			    try {
					while (rs.next()) {
						
						IDTextfeld.setText( rs.getString("id") );
						IDTextfeld.repaint();
```

usw.

Wie bekomme ich die ID aus dem Vector gelesen, wenn ich in der JList nur mit getSelectedIndex arbeiten kann? getSelected Value funktioniert mit dem Object nicht.
Evtl. in ein Array umwandeln?

Gruß


----------



## chucknorris (25. Mai 2009)

```
Object getID = liste.get(WahllokalListe.getSelectedIndex());
```

so scheints zu gehen...


----------



## Gast2 (25. Mai 2009)

Ist ja alles schön und gut und wie wärs ein bischen mehr OO ????

mach dir eine klasse person

kleines bsp...


```
public class Person
{

private String id;
private String vorname;
private String plz;


//usw. get + set
}
```



```
public List<Personen> getAllPersonen()
final List<Personen> liste = new ArrayList<Personen>();
        ConnectMySQL db = ConnectMySQL.getInstance();
        ResultSet rs = db.query("SELECT * FROM TabellePersonen");
                 while (rs.next()) {
               Personen pers = new Personen();
               pers.setId(rs.getString("id");
               pers.setName(rs.getString("Name");
               liste.add(pers);
               }
return liste;
}
```


und dann in deiner view...


```
JList list = new JList(DBInstanz.getPersonen().toArray[]);
        list.addListSelectionListener(new ListSelectionListener()
        {

            public void valueChanged(ListSelectionEvent e) {
               Person pers = (Person)list.getSelectedValue();
                setTextfelder(pers)
            }
            
        });


//....
private void setTextfelder(Personen pers)
{
txtId.setText(pers.getId());
usw....

}
```


----------



## chucknorris (25. Mai 2009)

Vielen Dank für die Hilfe. Der OO-Ansatz muss auf jedenfall noch optimiert werden, stimmt 

Gruß


----------

