# Löschen eines Eintrages verbunden mit JList



## Guest (7. Aug 2007)

Guten Tach,

ich habe ein Problem beim Löschen eines Eintrages aus einer JList verbunden mit einer MySql - Datenbank.

Ich will mit Hilfe der ID des Datenbankeintrages den richtigen Eintrag aus der JList löschen(JList enthält all diese Datensätze aus der Datenbank).

Jedoch will ich in der JList nicht die ID anzeigen lassen. Mit der ID in der JList ist mir das löschen schon klar, ohne (so wie ich es will) jedoch nicht.

Hat jemand eine Idee.


```
public void dataDelete(){
		try{
                        //Was muss hier noch hinzugefügt werden?????
			String dat = ("delete from tblKunden where ID="  );
			dataQuery(dat);
			model.removeElementAt(liste.getSelectedIndex());
		}catch(Exception ex){
			System.out.println("Fehler beim Löschen :" + ex.getMessage());
		}
	}
```

Danke

Grüße Martin


----------



## André Uhres (8. Aug 2007)

Versuch's mit einer Wrapperklasse:

```
package list;
/*
 * ListItem.java
 */
public class ListItem{
    private String data;
    private String id;
    public ListItem(final String data, final String id){
        this.data = data;
        this.id = id;
    }
    public String getId() {
        return id;
    }
    public String toString() {
        return data;
    }
}
```


```
package list;
/*
 * ListDemo.java
 */
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class ListDemo extends JFrame {
    private JList list;
    private DefaultListModel model;
    public ListDemo() {
        super("List Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        model = new DefaultListModel();
        for (int i = 1; i < 6; i++) model.addElement(new ListItem("Item "+i, ""+i));
        list = new JList(model);
        getContentPane().add(new JScrollPane(list), BorderLayout.CENTER);
        list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(final ListSelectionEvent e) {
                if(e.getValueIsAdjusting()) return;
                ListItem it = (ListItem)list.getSelectedValue();
                System.out.println(it.getId());
            }
        });
    }
    public static void main(final String args[]) {new ListDemo().setVisible(true);}

}
```


----------



## Guest (8. Aug 2007)

Hallo,

habs mal versucht,

leider wird der Eintrag nicht gelöscht.

Weiters wird immer der Fehler "java.lang.String cannot be cast to ListItem" herausgegeben bei der Zeile:


```
ListItem it = (ListItem)liste.getSelectedValue();
```

Obwohl ja getSelectedValue eine JList zurückgibt.

Die Klasse ListItem

```
public class ListItem {
	 	public String data;
	    public String ID;
	    public ListItem(final String data, final String ID){
	        this.data = data;
	        this.ID = ID;
	    }
	    public String getID() {
	        return ID;
	    }
	    public String toString() {
	        return data;
	    }
}
```

Und die Funktion datenLoeschen()

```
public void datenLoeschen(){
		try{
			model.removeElementAt(liste.getSelectedIndex());
			liste.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
				public void valueChanged(ListSelectionEvent e){
					if(e.getValueIsAdjusting()) return;
					ListItem it = (ListItem)liste.getSelectedValue();
					System.out.println(it.getID());
					String dat = ("delete from tblbenutzer where ID=" + it.getID());
					datenEintragen(dat);
				}
			});
		}catch(Exception ex){
			System.out.println("Fehler beim Löschen :" + ex.getMessage());
		}
	}
```


----------



## SlaterB (8. Aug 2007)

> Obwohl ja getSelectedValue eine JList zurückgibt

eine JList??

weder eine JList noch korrekterweise ein ListItem, sondern ein String, wie es die Fehlermeldung doch sagt,

wieso siehst du diese Fehlermeldung und sagst dann 'Obwohl ja getSelectedValue [was anderes] zurückgibt'
was bringt dich zu dieser Vermutung/ Erkenntnis?

---------

es scheint, als wenn nur Strings in der JList sind,
wie wird die JList denn befüllt (Code)?


----------



## Guest (8. Aug 2007)

Weil hinter getselectedValue() object JList steht, dachte ich es mir


Liste wird folgendermaßen befüllt:


```
public void listefuellen(){           
	      try{
	    	 model.clear();
	         datenauslesen("select * from tblbenutzer");
	         while(rs.next()){
	             String s = rs.getString(2) + " " + rs.getString(3);
	        	 model.addElement(s);
	         }   
	      }catch(SQLException sqle){
	         System.out.println("Listefuellen fehler" + sqle.getMessage());
	      }
	}


public void datenauslesen(String daten){
		try{
			databaseConn();
			st = conn.createStatement();
			rs = st.executeQuery(daten);
		}catch(SQLException sqle){
			System.out.println("Fehler beim auslesen" + sqle.getMessage());
		}
	}
```


----------



## SlaterB (8. Aug 2007)

das heißt, dass 'Object' zurückgegeben wird und dass die Operation der Klasse JList zuzurechnen ist  (und nicht einer der Oberklassen/ Interface) 

--------

du fügst in deine Liste keine ListItem ein, sondern Strings,
da wunderst du dich, dass String rauskommen statt per Zauberhand ListItems?


----------

