Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

OrderedTree in JList ausgeben?

Empfohlene Antworten

Veröffentlicht

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.

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.

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

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.

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

schneibar liegt der Fehler bei einer anderen Methode. Bei searchAutor kommt scheinbar immer nur null als ausgabe. Weiß aber leide nicht wieso.

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.

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.

alle klassen also bucherei, OrderedTree,BinTree,List, Autor und Werke haben "implements Serializable" implementiert

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.