Nada

Laboration 4 - Livsträdet

I läroboken finns ett program som skriver ut filkatalogträd med hjälp av den mest avancerade swingkomponenten, JTree. Koden finns här. DirTree.java. Kompilera den och provkör med

java DirTree

som ska visa trädet under den katalog du står i. Försök också till exempel

java DirTree ~henrik/labbar

som visar trädet för den angivna katalogen. Kolla att klickningar fungerar och att man kan få veta detaljer om en fil om Show details är markerad.

Ett minimalt livsträd

Din uppgift är att modifiera programmet så att det visar ett helt annat träd, nämligen livsträdet. I trädets rot ska det stå Liv och roten ska ha tre barn, Växter, Djur och Svampar som i sin tur innehåller ordningar, underordningarn familjer, släkten och arter. Börja med några små ändringar:

Ett rekursivt livsträd

I stället för att tillverka noderna för hand ska du läsa in livsträdet från filen Liv.xml.. En liten testversion av filen ser ut så här.
<Biosfär namn="Liv"> är allt som fortplantar sej 
<Rike namn="Växter"> kan inte förflytta sej 
</Rike> 
<Rike namn="Djur"> kan förflytta sej 
</Rike>
<Rike namn="Svampar"> är varken djur eller växter 
</Rike>
</Biosfär>
Förutom nodens namn finns nu också en nivå (t ex Rike) och en förklarande text men för dom finns ingen plats i klassen DefaultMutableTreeNode. Skriv därför en egen subklass Nod med String-variablerna level och text. Nu behövs bara en rekursiv metod som kan anropas så här.
  root=läsNod(); //Läser XML-filen och skapar hela trädet 
Innan metoden anropas bör man ha glufsat den första vänstervinkeln ur filen så att läsNod efter att ha skapat en tom nod kan läsa starttaggen och skriva in nivån, läsa attribut och sätta nodbeteckning med nod.setUserObject(...), glufsa högervinkeln, anropa läsMellan(nod) som läser in den förklarande texten och adderar eventuella barnnoder. Lifetree.gif När sluttagg nås ska den läsas och jämföras med starttaggen och eventuell RuntimeException kastas, men normalt returneras den skapade noden. Metoden förklaras i föreläsning 7.

Liksom i det ursprungliga programmet DirTree ska du kunna ange filnamn efter exekveringskommandot

java LifeTree livfil

och om inget namn anges ska programmet ta filen Liv.xml.

Detaljupplysningar om livet

I det ursprungliga programmet får man filupplysningar om "Show details" förkryssas. I ditt program ska man i stället få se den förklarande texten, till exempel Art: Mås gillar Vaxholmsbåtar. Fixa så att showDetails(TreePath p) lägger ut denna text i sin JOptionPane.

Extrauppgift: Ordna så att man också får hela kedjan utskriven på formen men allt som är Mås är Fåglar är Djur är Liv. Användbar metod i TreePath är getLastPathComponent() och i DefaultMutableTreeNode och därmed i Nod finns metoden getParent().







Ett livat träd av ................................... gillade.............................. den .................


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 14 april 2002
Tekniskt stöd: <webmaster@nada.kth.se>