Laboration 5 - LivsträdetBoken Object-oriented programming in Java av Martin Kalin har tidigare använts som kursbok på DD2385. I boken finns ett program som grafiskt presenterar filkatalogträd med hjälp av en avancerad swingkomponent, JTree. Koden (något lite modifierad) 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ädDenna första förberedande 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 . Dessa ska senare i sin tur
kunna innehålla ordningar, underordningar, familjer, släkten och arter.
Börja med några små ändringar för att bekanta dig med programmet:
Ett rekursivt livsträdI stället för att tillverka noderna för hand ska du läsa in livsträdet från filen Liv.xml (finns även som Liv.txt). En liten testversion av filen ser ut så här, finns också i LillaLiv.txt. Om du har problem med svenska bokstäverna, använd följande versioner: Life.txt, Life.xml och TinyLife.txt som är utan prickar och ringar.<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 i filerna 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 t.ex. MyNode med
String-variablerna level och text så att all
data från livträdsfilerna får plats.
Skriv sedan en rekursiv metod som läser filen och skapar trädet, t.ex.
enligt följande:
root=readNode(starttagg); //Läser XML-filen och skapar hela trädetInnan den här metoden anropas bör man ha läst den första vänstervinkeln och starttaggen ur filen. readNode läser data för noden
och skapar ett nodobjekt.
![]()
Liksom i det ursprungliga programmet DirTree ska man kunna ange filnamn
efter exekveringskommandot Detaljupplysningar om livetI 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 exempelArt: Mås gillar Vaxholmsbåtar .
Fixa så att showDetails(TreePath p) lägger ut denna text
i sin JOptionPane.
Läsning från textfilGörs enklast med klassenScanner :
Scanner sc = new Scanner(new File("infil.txt")); new File(...) kan generera ett FileNotFoundException
som måste hanteras men om det gick bra att hitta filen kan man sedan
läsa radvis med sc.nextLine() .
Krav på programmet
Filformat m.m.
RedovisningKör programmet med den större infilen och demonstrera alla funktioner. Glöm inte att be om handledarens signatur på kvittensbladet när han/hon är nöjd med er redovisning!
Extrauppgift (liten!):Ordna så att man förutom grundinformationenArt: Mås gillar Vaxholmsbåtar
också får hela kedjan av namn utskriven
på formen men allt som är Mås är Fåglar är Djur är Liv .
Användbar metod i TreePath är
getLastPathComponent() . I
DefaultMutableTreeNode
och därmed i
MyNode finns metoden getParent() .
Det finns även andra metoder som löser uppgiften.
|