# JList einen Eintrag hinzufügen?



## Guest (11. Jun 2007)

Hallo,

wie kann ich einer JList einen Eintrag hinzufügen?


----------



## L-ectron-X (11. Jun 2007)

Du besorgst dir ihr Model

```
DefaultListModel listModel = (DefaultListModel)myList.getModel();
```

Und dann kannst du Elemente am Ende der JList hinzufügen mit

```
listModel.addElement(element);
```

oder an eine bestimmte Position einfügen mit

```
listModel.add(index, element);
```

Nachzulesen hier: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/DefaultListModel.html
und hier: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JList.html


----------



## Guest (11. Jun 2007)

hmm bei mir funktioniert das irgendwie noch nicht mit dem DefaultListModel...
sieht bei mir folgendermaßen aus:


```
for (int j = 0; j < namen.size(); j++) {
                String hilf = namen.get(j);
                    if (hilf.startsWith(karte[i])) {
                        // Ihr Model besorgen
                        DefaultListModel listModel = (DefaultListModel)list[i].getModel(); //List ist eine JList
                        listModel.addElement(hilf);
                    }
            }
```

zeigt auch keinen Fehler an, aber wenn ich es starten möchte, spuckt er folgende Exception aus...

Exception in thread "main" java.lang.ClassCastException: javax.swing.JList$3 cannot be cast to javax.swing.DefaultListModel


----------



## Guest (11. Jun 2007)

ok problem hat sich gelöst!
DANKE


----------



## L-ectron-X (11. Jun 2007)

> ```
> ... = (DefaultListModel)list[i].getModel()
> ```


Hast du mehrere JList-Referenzen in einem Array gespeichert?
Dein Code besorgt nämlich das Model einer JList an Index-Position i aus einem JList-Array...

Edit: Fein!


----------



## kleiner_held (11. Jun 2007)

Ich glaube das Problem war, das er kein DefaultListModel verwendet hat.
Wenn man eine JList mittels new JList(Object[]) erzeugt, wird eine anonyme innere Klasse von JList als Model verwendet. Die ist auch nicht mutable.


----------



## Miggel (7. Aug 2007)

Wie hat sich das Problem jetzt gelöst, ich steh nämlich gerade bei dem gleichen Problem, und weiß nicht wie man es beheben kann:


```
tModel1 = (DefaultListModel)jPartner1.getModel();
```


----------



## Miggel (7. Aug 2007)

Oh, falscher Code Schnippsel,
die Frage ging an Gast, folgende Fehlermeldung ist zu sehen:


```
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$1 cannot be cast to javax.swing.DefaultListMode
```


----------



## Guest (15. Aug 2007)

Miggel hat gesagt.:
			
		

> Oh, falscher Code Schnippsel,
> die Frage ging an Gast, folgende Fehlermeldung ist zu sehen:
> 
> 
> ...


An dem JList*$1* erkennst du, dass es eine Instanz einer anonymen Klasse ist und ClassCastException sagt 
dir hier, dass es kein DefaultListModel ist. 

Hol dir am besten das hier (Verwendung weiter unten):
	
	
	
	





```
class GenericListModel<T> extends AbstractListModel
{
   private static final long serialVersionUID = 1L;
   private List<T> data = Collections.synchronizedList(new ArrayList<T>());

   public GenericListModel()
   {
      super();
   }

   public final void setData( final List<T> newData)
   {
      data.clear();
      data.addAll(newData);
      fireContentsChanged(this, 0, data.size()-1);
   }

   public final List<T> getData()
   {
      return new ArrayList<T>(data);
   }

   public final void add(final T value)
   {
      int changeIndex = data.size();
      data.add(value);
      fireIntervalAdded(this, changeIndex, changeIndex);
   }

   public final boolean remove(final T value)
   {
      boolean result = false;
      int index = data.indexOf(value);
      if(index >= 0)
      {
         result = data.remove(value);
         fireIntervalRemoved(this, index, index);
      }
      return result;
   }

   public final Object getElementAt(int index)
   {
      return data.get(index);
   }

   public final int getSize()
   {
      return data.size();
   }
}

abstract class AbstractListCellRenderer<T> extends DefaultListCellRenderer
{
   public AbstractListCellRenderer()
   {
      super();
   }

   @Override
   @SuppressWarnings("unchecked")
   public final Component getListCellRendererComponent(final JList list, final Object value, int index, boolean isSelected, boolean cellHasFocus)
   {
      JLabel label = (JLabel)super.getListCellRendererComponent(list, "", index, isSelected, cellHasFocus);
      label.setText(formatValue((T)value));
      return label;
   }

   protected abstract String formatValue(final T value);
}
```
Verwendung (angenommen du hast Objekte vom Typ Person)
	
	
	
	





```
list.setModel(new GenericListModel<Person>());
list.setCellRenderer(
   new AbstractListCellRenderer<Person>() {
      private static final long serialVersionUID = 1L;
      protected final String formatValue(final Person value)
      {
         return String.format("%s - %s", value.getNachname(), value.getVorname());
      }
   }
);
```


----------

