Zum Inhalt springen

OrderedTree in JList ausgeben?


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

Geschrieben
... 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.

Geschrieben

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

Geschrieben

habs hinbekommen^^ hatte eine implements vergessen in der aller letzten klasse^^

Ist das eigentlich normal das man hier keine Beiträge editieren kann?

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...