siser Geschrieben 29. März 2009 Geschrieben 29. März 2009 Hi, ich habe einen OrderedTree bzw BinTree und möchte die Daten in diesem verwalten. Nun müssen dies aber auch ausgegeben werden. Dazu möchte ich JList verwenden. Aber JList erwartet ja als Model ein Array oder Vector, ich möchte aber die Daten in einem OrderedTree verwalten. Wie kann ich es bewerkstelligen das die beiden zusammen funktionieren? Oder gibt es vlt. eine geeignetere Ausgabemethode? Die Jlist soll Namen aus dem Tree darstellen. Möchte also das wenn man aus der Liste einen Namen auswählt, Informationen über dieser Person aus dem OrderedTree abgefragt werden und in eine Maske geschrieben werden. Wenn ich aber alles zuvor in ein Liste konvertieren, wäre das ja ziemlich umständlich. Also je nachdem welcher Name gerade selektiert ist, dieser Name ist auch das aktuelle Object. Zitieren
zui2000 Geschrieben 30. März 2009 Geschrieben 30. März 2009 was für einen Datentyp benutzt du denn für deinen Baum? Bsp.: TreeMap - TreeMap().values().toArray() Sauber wäre es, wenn du ein neues ListModel implementierst und das für deinen Baum umstellst. Somit kannst du dem Model deinen Baum geben und dann ganz individuell anzeigen lassen. Zitieren
siser Geschrieben 30. März 2009 Autor Geschrieben 30. März 2009 Nein, das ist eine eigen geschriebene. Bin derzeit echt ratlos wie ich das implementieren soll. Also nochmal zusammengefasst: Ich habe Autoren in einem OrderedTree verwaltet, diese wiederum haben jeweils eine Liste für ihr geschriebenen Werke. Graphisch dargestellt soll es durch eine JList werden. Wie bekomm ich jetzt das aktuelle Element raus? Wenn ich den OrderedTree traversiere und dann in ein Array packe sind es nur noch Strings und keine Objects mehr. Ich häng das prog mal an.projeckt.jar.zip Zitieren
zui2000 Geschrieben 31. März 2009 Geschrieben 31. März 2009 Wie schon erwähnt würde ich das über ein eigenes Model für die Liste machen. Hier mal ein grober Denkanstoss, ob das so funktioniert kann ich dir aber auch nicht sagen. import javax.swing.AbstractListModel; public class ListModelFoo extends AbstractListModel { private Buecherei buecherei = new Buecherei(); //test public Object getElementAt(int index) { // TODO Auto-generated method stub for (int i = 0; i < index; i++) { buecherei.getSortedList().next(); } return buecherei.getSortedList().getItem(); } public int getSize() { // TODO Auto-generated method stub int size=0; while(!buecherei.getSortedList().isEmpty()) { buecherei.getSortedList().next(); size++; } return size; } } und dann bei der GUI: //listAutorenliste = new JList(buecherei.getAutorArray()); listAutorenliste.setModel(new ListModelFoo()); Vielleicht probierst du es mal auf dem Wege. Ist aber nur ein Tip und vielleicht so auch nicht machbar. Zitieren
siser Geschrieben 31. März 2009 Autor Geschrieben 31. März 2009 Hm , irgendwie passiert aber auch mit der Methode eine Nullpoint Exeption und ich hab keine Ahnung wieso. Nach der Angabe wär das genau in Z.63 also bei der Erstellung der Jlist bzw bei der Impelmentierung des ListSelectionListeners Zitieren
siser Geschrieben 31. März 2009 Autor Geschrieben 31. März 2009 schneibar liegt der Fehler bei einer anderen Methode. Bei searchAutor kommt scheinbar immer nur null als ausgabe. Weiß aber leide nicht wieso. Zitieren
VaNaTiC Geschrieben 1. April 2009 Geschrieben 1. April 2009 hmm, das funktioniert glaube ich nicht, denn buecherei.getSortedList() erzeugt intern bei jedem Aufruf eine neue JList als return-Wert!!! Zitieren
VaNaTiC Geschrieben 1. April 2009 Geschrieben 1. April 2009 Aber per Brainstorming würde ich daraus folgendes machen: import javax.swing.AbstractListModel; public class ListModelFoo extends AbstractListModel { private Buecherei buecherei = null; public ListModelFoo(Buecherei buecherei) { this.buecherei = buecherei; } public Object getElementAt(int index) { List liste = buecherei.getSortedList(); while (index-- > 0) liste.next(); return liste.getItem(); } public int getSize() { List liste = buecherei.getSortedList(); int count = 0; liste.toLast(); while (!liste.isInFrontOf()) { ++size; liste.prev(); } return size; } } listAutorenliste.setModel(new ListModelFoo(buecherei)); Prinzipiell ist auch das Berechnen der Größe einer LinkedList immer ein Problem. Deshalb kenne ich keine Implementierung, die nicht auch intern einen Counter mitschleppt, der beim add, remove, ... den internen counter verändert, so dass dieser direkt zurückgegeben werden kann. Ingesamt kommt mir das Ganze rein akademisch zum Erlernen und nicht besonders performant vor. Zitieren
siser Geschrieben 1. April 2009 Autor Geschrieben 1. April 2009 Die Verwaltung habe ich nun hinbekommen. Mein nächstes proble ist das ich die Bücherei speichern möchte. Wenn ich es mit oos.writeObject((Object)buecherei); verusch kommt aber eine I/O Exeption. die bucherei ist eine OrderedTree. Zitieren
siser Geschrieben 1. April 2009 Autor Geschrieben 1. April 2009 alle klassen also bucherei, OrderedTree,BinTree,List, Autor und Werke haben "implements Serializable" implementiert Zitieren
VaNaTiC Geschrieben 2. April 2009 Geschrieben 2. April 2009 ... oos.writeObject((Object)buecherei); ... aber eine I/O Exeption. Hmm, oos klingt nach ObjectOutputStream oder wieder etwas eigenes? (Object)buecherei?! expliziter typecast eines Objektes in Objekt? Das ist doppelt gemoppelt. Und dann hab ich da noch ein Problem mit der Exception! Wo willst Du denn den oos hinschreiben? Poste doch mal etwas Code und die genaue Fehlermeldung. Zitieren
siser Geschrieben 2. April 2009 Autor Geschrieben 2. April 2009 private void bearbeiteSpeichern(){ try { FileOutputStream fos = new FileOutputStream("daten.buecherei"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(((Object)buecherei)); fos.close(); oos.close(); } catch (IOException e) { JOptionPane.showMessageDialog(this, "Konnte Arrayeinstellungsdatei nicht erstellen."); } } private void bearbeiteOeffnen(){ try { FileInputStream fis = new FileInputStream("daten.buecherei"); ObjectInputStream ois; try { ois = new ObjectInputStream(fis); buecherei =(Buecherei) (ois.readObject()); listAutorenliste.setListData(buecherei.getAutorArray()); listAutorenliste.setSelectedIndex(0); ois.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(this, "Konnte Arrayeinstellungsdatei nicht laden."); } Als Fehler kommt halt die Messagebox (this, "Konnte Arrayeinstellungsdatei nicht speichern."); Die Klassen der bucherei und deren unterklassen hab ich alle mit import java.io.Serializable; public class XXX extends XXX implements Serializable versehen Zitieren
siser Geschrieben 2. April 2009 Autor Geschrieben 2. April 2009 habs hinbekommen^^ hatte eine implements vergessen in der aller letzten klasse^^ Ist das eigentlich normal das man hier keine Beiträge editieren kann? Zitieren
VaNaTiC Geschrieben 3. April 2009 Geschrieben 3. April 2009 Ist das eigentlich normal das man hier keine Beiträge editieren kann? Ich glaube, 15 Min nach Erstellung, ja. Danach nicht mehr. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.