TreeModel oder Baumstruktur

Status
Nicht offen für weitere Antworten.

Pfirsich

Mitglied
Hallo

ich muss mir eine Datenstruktur ausdenken mit der ich folgendes realisieren kann:
- Hinzufügen
- Löschen
- Lesen
- Ändern

So eine Struktur muss ich anlegen können: (sehr stark vereinfacht)
2009-04-18_131957.gif


Hier einmal mit gefüllten Daten:
http://picload.org/image/4dde5cd919df6355b0f268e4a041c41f/2009-04-18_132657.gif

Ich muss mir zB alle Namen einer Firma wiedergeben lassen (for...) ok aber wie erstelle ich möglichst elegant diese Struktur? Wie implementiere ich es wende es an? Gibt es hier irgendwo ein Beispiel?


Danke
 

0x7F800000

Top Contributor
Öhm? Das heißt OOP? Man erstelle eine klasse Mitarbeiter mit attributen Name,Alter,Telefon,Status... und man erstelle eine klasse Firma, die eine Collection von mitarbeitern verwaltet? ???:L Was will man denn da sonst? Oder ich vesteh die frage gar nich...
 

faetzminator

Gesperrter Benutzer
du machst eine List<Firma>, wobei Firma eine List<Mitarbeiter> enthält, welcher deine definierten Attribute beinhaltet. Bei diesen sollte man sich ein paar Überlegungen zu den Datentypen machen. Ich würde z.B. status als int ablegen und Konstanten zur Verfügung stellen.
 

Pfirsich

Mitglied
Kann ich nicht irgendwie das Model vom JTree verwenden? Halt ohne die grafische Anzeige? Ich benötige ja nur die Funktionen.
 

faetzminator

Gesperrter Benutzer
was für Methoden von JTree brauchst du denn? Das sind ja grösstenteils Einzeiler, falls du mit einer List arbeitest...
 

Pfirsich

Mitglied
Ablauf:
Code:
public class Main {
    
    public static void main(String[] args) {
        
        TestTree tt = new TestTree();
                 tt.addFirma("Apple");
                 tt.addFirma("Microsoft");
                 tt.addFirma("BMW");
        
                 System.out.println(tt.getFirma(1));
                 
                 // Nun möchte ich Apple ein Blatt hinzufügen
    }
}

Wie realisiere ich es hier?
Code:
import javax.swing.tree.DefaultMutableTreeNode;

public class TestTree {
    
    DefaultMutableTreeNode root;
            
    public TestTree() {
        root = new DefaultMutableTreeNode( "root" );
    }
                    
    void addFirma(String name) {
        root.add( new DefaultMutableTreeNode( name ));
    }
    
    String getFirma(int pos) {
        return root.getChildAt(pos).toString();
    }
    
    void addBlatt(String firma, String name){
        // ??? Wie füge ich nun einer Firma ein weiteres Blatt hinzu? 
    }
}
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Du hast noch nicht gemerkt, dass hier kein Tree vorliegt, hm?
Aber nimm z.B. das als Beispiel...
Java:
import java.util.ArrayList;
import java.util.List;


public class FirmenListe {
	
	public static void main(String[] args) {
		FirmenListe firmen = new FirmenListe();
		Firma firmaIbm = new Firma("IBM");
		firmaIbm.addMitarbeiter(new Mitarbeiter("Robert", 23));
		firmen.addFirma(firmaIbm);
	}

	private List<Firma> firmen;
	
	public FirmenListe() {
		this.firmen = new ArrayList<Firma>();
	}
	
	public void addFirma(Firma firma) {
		this.firmen.add(firma);
	}
	
	public int size() {
		return this.firmen.size();
	}
	
	public Firma getFirma(int index) {
		return this.firmen.get(index);
	}
	
	public void removeFirma(int index) {
		this.firmen.remove(index);
	}
}
Java:
import java.util.ArrayList;
import java.util.List;


public class Firma {

	private String name;
	
	private List<Mitarbeiter> mitarbeiter;
	
	public Firma(String name) {
		this.name = name;
		this.mitarbeiter = new ArrayList<Mitarbeiter>();
	}
	
	public String getName() {
		return this.name;
	}
	
	public void addMitarbeiter(Mitarbeiter mitarbeiter) {
		this.mitarbeiter.add(mitarbeiter);
	}
	
	public int size() {
		return this.mitarbeiter.size();
	}
	
	public Mitarbeiter getMitarbeiter(int index) {
		return this.mitarbeiter.get(index);
	}
	
	public void removeMitarbeiter(int index) {
		this.mitarbeiter.remove(index);
	}
}
Java:
public class Mitarbeiter {
	
	private String name;
	
	private int alter;

	// alle anderen felder...
	
	public Mitarbeiter(String name, int alter) {
		this.name = name;
		this.alter = alter;
	}
	
	public String getName() {
		return this.name;
	}
	
	public int getAlter() {
		return this.alter;
	}
	
	// alle anderen getter (und setter)
}
 

Pfirsich

Mitglied
Das sieht doch schon mal ganz gut aus. Ich werde es gleich mal testen und anpassen.

Ich melde mich aber auf jeden Fall heute Abend nochmal.

Danke für die Mühe.
 

faetzminator

Gesperrter Benutzer
Noch was bzgl. deiner Aussagen zu den Trees. In diesem Fall hast du eine klar definierte Tiefe, welche erst noch unterschiedliche Typen fordert (ausser man will alles mit Strings machen...). Einen Tree verwendet man, wenn man von einem Typen eine nicht definierte Tiefe haben möchte. Ist dann die Breite aber eins, hat man eine List ;)
Also, das was du hier braucht sind einfache Datenklassen; Beans.
 

Marco13

Top Contributor
Die Aussage
Einen Tree verwendet man, wenn man von einem Typen eine nicht definierte Tiefe haben möchte.
würde ich bestätigen, aber nochmal erwähnen: die umgekehrte Richtung gilt nicht notwendigerweise. Wenn man diese Baumstruktur (aus verschiedenen Klassen, mit einer bestimmten Tiefe) hat, dann kann man da auch ein TreeModel drumwickeln, um das ganze anzeigen zu können. Dass es (in diesem Fall) nicht unbedingt Sinn macht, die Daten komplett (NUR) in einem TreeModel zu speichern, stimmt aber.
 

Pfirsich

Mitglied
Klasse, vielen Dank nochmal. Ich hab nun einen guten Ansatz auf den ich aufbauen kann. Momentan funktioniert es (noch) so wie ich es mir vorstelle. PS: Ich hab mich anscheinenden mit der Baustruktur versehen. Ich hab den Code erweitert und komme nun auf maximal 2 Ebenen.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben