DefaultListModel casten zu einer Klasse und/oder sortieren.

  • Ersteller Ersteller DefconDev
  • Erstellt am Erstellt am
D

DefconDev

Gast
Hallo,

ich habe mal wieder ein wenig Probleme.

Ich habe ein DefaultListModel eingebettet in eine JList. Das DefaultListModel nimmt einige Objekte meiner eigenen Klasse "Spieler" auf.

Während der Laufzeit bin ich gezwungen dieses DefaultListeModel auszulesen und am besten zu casten (Spieler).

Das Problem ist aber nun, dieses DefaultListModel lässt sich nur ein Object Klasse casten und diese wiederrum lässt sich nicht meine Spieler Klasse casten. Zwar sieht der Compiler das nicht, aber während der Laufzeit gibt es eine ArrayStoreException.

Casten möchte ich nur um das DefaulListModel indirekt zu sortieren.

Sollte das nicht gehen, wäre ich auch dankbar dafür wenn mir einer sagen könnte wie ich generell eine DefaultListe nach meinen Vorgaben sortieren kann. Also eine Art compareTo Methode.
 
es wäre eventuell hilfreich, wenn du uns die Sprache nennst oder den Code postest
 
JAVA....

Willst du das DefaultListeModel in deine Spielerklasse casten? ... oder meinst du hier die einzelnen Spieler-Objecte?

Das DefaultListeModel kann dir eine Enumeration auf alle Elemente zurückgeben, die einzelnen Elemente kannst du dann in deine Spieler casten.

Du könntest die elemente auch direkt in einen Vector einsortieren und den dann mit Collections.sort(Vector) sortieren.
Die toString() methode deiner Spielerklasse sollte den Namen ausgeben, dann sollte das sortieren mit Collection.sort() auch klappen... ohne casten.
 
Sorry , dass ich mich jetzt erst wieder melde.

Ja, es geht um Java.

Code:
Spieler zeus = new Spieler();
Spieler spielerArray[]=new Spieler[10];

spielerListenModel = new DefaultListModel();

zeus=(Spieler)spielerListenModel; //Funktioniert nicht

spielerArray[0]=(Spieler)spielerListenModel; //Funktioniert ebenso nicht

Das ganze in ein Objekt der Klasse Object zu packen funktionert aber das weiter casten an meine Spielerobjekte leider auch nicht.

Das direkt in meine KLasse zu casten habe ich noch nicht probiert.

Mit Enumeration habe ich mich bisher nie beschäftigt, muss ich mal genauer anschauen

Danke aber erst mal für die Tipps.
 
Code:
zeus=(Spieler)spielerListenModel; //Funktioniert nicht
Das ist Mist. Demnach wäre ja ein Spieler selbst eine Spielerliste.
Hol' dir lieber ein Object aus der Liste und caste dieses zu Spieler.
 
Hi,
du musst deine Spielerobjekte natürlich erst zum DefaultListModel hinzufügen. Dass das Model selbst nicht in einen Spieler gecastet werden kann, ist doch vollkommen klar, da das Model selbst ja kein Spieler ist. Du musst deine Spielerobjekte wieder aus dem Model holen und diese dann casten. Das wird funktionieren da diese ja auch wirklich Spielerobjekte sind (wenn auch in Gestalt von java.lang.Object).

Und um deine Spielerobjekte sicher und wunschgemäß zu sortieren, solltest du das java.lang.Comparable<T> interface implementieren. Darin kannst du genau definieren wie deine Objekte sortiert werden sollen. Du solltest dich nicht auf default-Mechanismen ala toString() verlassen.

Greetz
hroessler
 
Code:
spielerListenModelLinks.addElement(spieler_A);

Damit add ich die Objekte.

Und in meinem Beitrag davor stand etwas Mist, ich will natürlich nicht die Liste casten sondern die Elemente.

Und gerade fällt mir auf...
ich habe tatsächlich die ganze Zeit versucht die Liste in ein Spieler-Objekt zu casten. Wie vernebelt muss man sein :mad:


Code:
spielerArray[0]=(Spieler)spielerListenModelRechts.getElementAt(0);

Jetzt klappt es auch. Ich weiß nicht warum ich das nicht gesehen habe. Sachen gibt es, ich habe wirklich 2 Stunden daran gewerkelt und herum gecastet.


@hroessler

Das Comparable<T> interface hatte ich schon meiner Spieler Klasse. DAs Problem war ich konnte die Spieler-Objekte nicht Vergleichen weil ich den Wald vor lauter Bäume nicht mehr sah.
 
Zurück
Oben