# JList sortieren



## Guest (22. Nov 2004)

Hallo,

hab ne Frage zum sortieren einer JList. Ich weiß dass die Klasse das Interface Comparable implementieren muss und zusätzlich die Methode public int comparteTo(Object o), aber wie sieht die Methode weiter aus?

bzw. muss ich die public static void sort (List list) auch verwenden? wenn ja wie? weiß im moment leider nicht weiter.

danke für eure tipps!


_Edit von L-ectron-X: Titel präzisiert_


----------



## Guest (22. Nov 2004)

hab jetzt testweise mal einen sort von strings versucht. also ich befülle eine JList mit Strings die ich aus einer Datenbank einlesen. Funktioniert ohne Probleme, nur sind diese halt nicht sortert. Dies passiert alles in einer Klasse, jetzt zum Testzweck. Will einfach nur die JList sortieren.

Collections.sort((List) list); // hier bekomme ich immer ein folgende Exception:
Exception in thread "main" java.lang.ClassCastException: javax.swing.JList

kommentiere ich diese Zeile aus wird meine JList problemlos angezeigt mit allen Strings die ich in einer Schleife eingefügt habe. nur das sortieren haut noch nicht hin, denn wird Colllections.sort einkommentiert bekomm ich immer diese Exception. irgendwas mach ich falsch bzw. hab ich vergessen.

hoff ihr habt nen tipp für mich.


----------



## L-ectron-X (22. Nov 2004)

Kannst Du mal den releavanten Code zeigen? Ich werde nicht ganz schlau aus Deinen Postings.
Ich weiß, was Du machen willst, aber irgendwie passt der Rest von Deinen Aussagen nicht zusammen.


----------



## Guest (23. Nov 2004)

so sieht die klasse aus:


```
public class JDBC
{
	static String url = "jdbc:odbc:schule2000";
	private static DefaultListModel model;
	private static JList list;
	String schuelerName;
	String schuelerVorname;
	
	public JDBC()
	{
		datenAusDBLesen();
	}
	
	public void datenAusDBLesen()
	{
		JFrame frame = new JFrame("JList Übung");
		JPanel panel = new JPanel();
		
		model = new DefaultListModel();
	
		try
		{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			Connection con = DriverManager.getConnection(url);
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT S_Name, S_Vorname FROM schueler");
			
		
		while(rs.next())
		{
			schuelerName = rs.getString("S_Name");
			schuelerVorname = rs.getString("S_Vorname");
			model.addElement(schuelerName);
			
		}
		}
		
		catch(ClassNotFoundException cnfex)
		{
			System.out.println("Failed to load JDBC/ODBC driver." );
		}
		catch ( SQLException sqlex )
		{
			System.out.println("Unable to connect" );
		}	
		
	

		list = new JList(model);
		frame.getContentPane().add(list);
		Collections.sort((List) list);
		frame.pack();
                frame.setVisible(true);
	}
	
	
	public static void main (String args[])
	{
		JDBC meinJDBC = new JDBC();
	}
}
```


----------



## Sky (23. Nov 2004)

Anonymous hat gesagt.:
			
		

> Collections.sort((List) list); // hier bekomme ich immer ein folgende Exception:
> Exception in thread "main" java.lang.ClassCastException: javax.swing.JList



Dazu findet man in der API:


			
				http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html hat gesagt.:
			
		

> public static void sort(List list)
> 
> Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface.



*Wichtig:* Die o.g. 'List' ist keine grafische Komponente! Und 'JList' ist keine Ableitung von 'List'!

Du mußt Dir ein eigenes Listmodel schreiben. In diesem Model musst Du dann deine Daten in einen Container hängen und diesen kannst Du, sofern er das 'List'-Interface implementiert, via Collections.sort(...) sortieren.


----------



## Guest (23. Nov 2004)

jetzt kenn ich mich irgendwie nicht mehr aus. wie kann ich dann meine JList aus meinem Beispiel sortieren?


----------



## jptc.org (23. Nov 2004)

Anonymous hat gesagt.:
			
		

> jetzt kenn ich mich irgendwie nicht mehr aus. wie kann ich dann meine JList aus meinem Beispiel sortieren?



So mal langsam: *javax.swing.JList* ist eine grafische Komponente für Swing Applikationen. Diese Komponente ermöglicht das Anzeigen von (wie der Name auch sagt) Listen! Sie ist also nur die View zu einem Model. Die Viewkomponente kann nicht sortiert werden.

Für die Sortierung kann man nur das Model nutzen (oder besser gesagt die java.util.List) die hinter dem Model steht. In deinem Beispiel könntest Du somit das folgende versuchen:


```
Vector elements = new Vector();

while(rs.next()) { 
         schuelerName = rs.getString("S_Name"); 
         schuelerVorname = rs.getString("S_Vorname"); 
         elements.addElement(schuelerName);           
} 

...

list = new JList(); 
Collections.sort(elements);
list.setListData(elements);
frame.getContentPane().add(list);
```

Auch wenn es vielleicht böse klingt: versuch doch mal ein Java Tutorial durch zu arbeiten!  :### Man kann keine javax.swing.JList nach java.util.List casten!

Ich hoffe das hilft weiter.

karsten voigt
http://www.java-news-center.org


----------



## Guest (23. Nov 2004)

danke mal für deine frage, ich möcht aber bzw. soll sogar ein model für die JList verwenden. und in das model schmeiß ich jetzt die sachen die ich in der JList stehen haben will hinein. kann ich nicht einfach dieses Model sortieren? bzw. brauch ich dazu unbedingt einen vector? funktioniert das irgendwie auch ohne vector bzw. array? wir sollen nämlich auch kein array verwenden das wir der JList dann übergeben sondern sollen dies mit einem model machen.

wie könnt ich das lösen?


----------

