# JList nach dem Rendern sortieren



## Bender (15. Dez 2011)

Hallo zusammen,

habe folgende Situation. Ich habe Daten in einem selbst implementierten AbstractTableModel.

Dieses Model enhält unteranderem ein key und einen namen und noch viele andere Werte.

Ich nutze jetzt aus diesem Model nur diese beiden Werte für eine JList indem ich ein DefaultListModel mit
den keys fülle und dann mittels eines eigenen Renderes die keys durch die namen ersetze.

Nun würde ich allerdings gerne noch die Daten in der JList sortieren und zwar nach dem namen, nicht nach dem key.

Welche Möglichkeiten gibt es dazu?

Was mir bisher eingefallen ist, die Daten im AbstractTableModel zu sortieren. Da sich dort eine ja eine ArrayList mit den Daten befindet, könnte die sortiert werden, allerdings wären die Daten dann insgesamt sortiert. Das wäre nur Plan B.

Vielen Dank


----------



## Michael... (15. Dez 2011)

Ich nehme mal an, Du hast ein TableModel weil Du auch eine JTable dazu hast.
Ich würde versuchen TableModel und ListModel möglichst unabhängig von einander zu halten. Also nicht im TableModel zu sortieren, nur  weil man in der JList eine sortierte Darstellung benötigt.
Besser für die JList ebenfalls eine eigenes ListModel scheiben, in dem man dann nach den benötigten Kriterien sortiert.


----------



## bERt0r (15. Dez 2011)

Da du ja keinen Funken code gezeigt hast, kann ich mal wieder nicht anders als einfach mal zu demonstrieren wie ich die Sache angehen würde:

```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;


public class EntryTest 
{
	
	public static void main(String args[])
	{
		//Ich nehme mal an du hast irgendwo eine Map
		HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
		Random r=new Random();
		for(int i=0;i<100;i++)
		{
			map.put(r.nextInt(1000),r.nextInt(1000));
		}
		
		
		Set<Entry<Integer, Integer>> entrySet=map.entrySet();
		
		ArrayList<Entry<Integer,Integer>> list=new ArrayList<Entry<Integer,Integer>>();
		list.addAll(entrySet);
		
		Comparator<Entry<Integer,Integer>> c=new Comparator<Entry<Integer,Integer>>()
				{
					@Override
					public int compare(Entry<Integer, Integer> a,
							Entry<Integer, Integer> b) {
						return a.getValue().compareTo(b.getValue());
					}
					
				};
		
		Collections.sort(list,c);
		
		//Jetzt pack list in ein ListModel für deine Liste
		System.out.println(list);
		
	}
}
```


----------



## Bender (16. Dez 2011)

Super danke. läuft super. Habs noch leicht verändert, da ich keine Hashmap hatte. Aber das war dann kein Problem mehr.


----------

