# Explorerähnliches Applet realisieren



## studentzlive (16. Sep 2004)

Hallo Forum,

ich möchte eine neues Applet schreiben und brauche noch ein paar Tipps, wie ich das am besten angehe. Ich hab leider selbst keine große Erfahrung mit Java, habe aber schon Erfahrung mit C++ und PHP/MySQL etc. Also OOP ist gelaeufig, nur die Umsetzung in Java eben noch nicht ganz so. Nun gibt es die FAQ, Bücher und vorhandene Beiträge, die ich schon durchgearbeitet habe. Leider gibt es wenig zu Applets im konkreten und wollte da auf vorhandenes Wissen der Profis zurueckgreifen. Bin selbst Student und eigentlich nicht schwer von Begriff  :wink:   

Was das Applet koennen soll:

ich habe mir eine GUI ähnlich des Windows-Explorer vorgestellt. Rechts einen Menue-Baum, der per XML ein- und ausgelagert werden soll und rechts daneben zu jedem Knotenpunkt ein Tabbed-Info (mehrere Tabs (Reiter)) wo man Werte eintragen/auslesen/per Slider veraendern kann undsoweiter... Sobald sich ein Wert ändert, sollen die benachbarten Knotenpunkte aktualisiert werden und dann veraendern sich auch die Vaterknoten, die evtl auch wieder benachbarte Knoten haben könnten (Rekursion).

Wie fange ich sowas am besten an (BottomUp oder TopDown)? Kann ich vorhandene Klassen verwenden und wie sehen die aus? Kann man sowas dann anpassen?

Ich dachte mir folgendes:

 - XML -> SAX ein und auslesen des Menuebaumes
 - Der Baum - ein JTree
 - Die Reiter - JTabbed
 - Die Berechnung per Rekursion

Da ich wie gesagt in Java noch ein wenig grün bin bräuchte ich ein paar Anfängertipps, die man immer gern falsch macht. Packages und Klassenimport, Objekteinteilung und die Grafische Sache (Swing)? Eine einzelne JAVA-Datei erstellen oder auf viele verteilen?

Viele Grüße,
studentzlive


----------



## L-ectron-X (16. Sep 2004)

Für ein solches Applet musst Du zwangsläufig mit Swing arbeiten, weil es mächtiger ist und somit die benötigten GUI-Komponenten bereitstellt.
Die Applet-Klasse muss also von _javax.swing.JApplet_ abgeleitet werden.
Ich denke, dass es am besten ist, wenn Du mit er Erstellung der GUI anfängst.
Packages? Kann man durchaus machen, bei der Größe Deines Projektes scheint es auch angebracht. Wenn es weiter wachsen soll/wird, wird das hilfreich sein.
Schreibe auf jeden Fall für jede Klasse eine eigene java-Datei, so bleibts übersichtlich.
Der Zugriff auf die Datei- und Verzeichnisebene gestaltet sich unter Applets im Allgemeinen etwas schwierig, weil u.U. die benötigten Rechte dazu fehlen. Aber auch ein solcher Zugriff lässt sich durchaus realisieren.


----------



## Illuvatar (16. Sep 2004)

Als erstes Programm in Java ist das ganz schön schwierig.
Aber ein paar Such- und API-Tips:

Applets signieren
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTree.html
Swing
http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html#listFiles()


----------



## studentzlive (16. Sep 2004)

Gut. 

Ich hab' mir das angekuckt. Nur um "Missverständnisse" zu vermeiden. Das Applet soll nur optisch so ähnlich aussehen wie der Windows-Explorer. Die Funktion ist eine andere. Es sollen Gewichtungen an den Einzelnen Knoten haengen und diese dann miteinander (Nachbarknoten) verglichen werden.

So einen Baum habe ich nun schon mit kleiner Hilfe aus einem Tutorial zur Anzeige gebracht.





Nun möchte ich noch einen JTabbedPane (?) daneben um für jeden diese Knoten (wenn sie jetzt auch erstmal Statisch angelegt werden und nicht aus einer XML kommen) einen oder zwei Tabs (z.B.  | Info \ Werte \ ) angeben kann. Das habe ich bis jetzt noch nicht hinbekommen.

hier ein kleiner Codeschnipsel aus der "noch" Applikation:

```
for(int childIndex=1; childIndex<10; childIndex++) {
      child = new DefaultMutableTreeNode("Vater " + childIndex);
      root.add(child);
      for(int grandChildIndex=1; grandChildIndex<10; grandChildIndex++) {
        grandChild =
          new DefaultMutableTreeNode("Kind " + childIndex +
                                     "." + grandChildIndex);
        child.add(grandChild);
      }
    }
```

Außerdem sollen nun noch Buttons unter den Baum (Laden/Speichern). Ich habe hier das BorderLayout genommen, aber das scheint wohl nicht das richtige fuer die schoene Anordnung von Buttons etc. zu sein. Zur Zeit ist es noch eine Applikation, die JFrame erweitert. Der Tipp mit JApplet ist gut, aber ich bekomm's nicht zum laufen. Immer hat der Compiler was zu meckern  :? 

Viele Grüße,
studentzlive


----------



## AlArenal (17. Sep 2004)

Du wirst für den Tree ein eigenes TreeModel benutzen müssen. Als Elemente für den Tree benutzt du am besten eine eigene Klasse, deren Instanzen du im TreeModel als Rückgabewert benutzt. Diese Klasse lässt du die Methode toString() überschreiben, deren Rückgabewert dann als String für die Darstellung im Tree verwendet wird.

Als nächstes bekommt der Tree von dir einen neuen ActionListener verpasst. Immer wenn da was angeklickt (MouseEvent "mouseReleased") wird, ruft der dann eine Methode (die du noch schreiben musst) auf und übergibt an diese die Instanz des angeklickten Objekts aus dem TreeModel. Diese Methode ist dann dafür zuständig auf der rechten Seite das von dir noch zu sschaffende GUI mit den Daten aus dem übergebenen Objekt zu füllen.

La voilá!

P.S.:
Warum soll das Ganze denn ein Applet werden?


----------



## studentzlive (17. Sep 2004)

AlArenal hat gesagt.:
			
		

> Du wirst für den Tree ein eigenes TreeModel benutzen müssen. Als Elemente für den Tree benutzt du am besten eine eigene Klasse, deren Instanzen du im TreeModel als Rückgabewert benutzt. Diese Klasse lässt du die Methode toString() überschreiben, deren Rückgabewert dann als String für die Darstellung im Tree verwendet wird.


Ja. Klingt gut.  Hier leider fehlen mir paar Java (Syntax) Kenntnisse.

ich wuerde es folgendermassen interpretieren:

```
public class myTreeModel {
     string name;
     long int id;
     string children[];
     // ...
     
     // ein Paar Methoden mit return myTreeModel(?) bzw. return this

     public toString(){
         return name;
     }
}
```



			
				AlArenal hat gesagt.:
			
		

> Als nächstes bekommt der Tree von dir einen neuen ActionListener verpasst. Immer wenn da was angeklickt (MouseEvent "mouseReleased") wird, ruft der dann eine Methode (die du noch schreiben musst) auf und übergibt an diese die Instanz des angeklickten Objekts aus dem TreeModel. Diese Methode ist dann dafür zuständig auf der rechten Seite das von dir noch zu sschaffende GUI mit den Daten aus dem übergebenen Objekt zu füllen.


Ja genau das meinte ich. So solls mal werden. Vielen Dank fuer die ausführliche Beschreibung.



			
				AlArenal hat gesagt.:
			
		

> P.S.:
> Warum soll das Ganze denn ein Applet werden?



Das ganze soll dann im Browser für bestimmte Leute laufen, die dann nur eine URL bekommen und dann sich was ausrechnen lassen koennen. Bis das aber alles fertig ist, dauerts wahrscheinlich noch ein Weilchen  :wink: 

Viele Gruesse, studentzlive


----------



## AlArenal (17. Sep 2004)

Ähm nein.. hm.. ich versuche es zu verdeutlichen:

Sagen wir mal die willst in deinem Tree Personendaten haben und im Tree sollen diese mit Namen angezeigt werden. In dem Fall würdest du eine Klasse Person erstellen, die hätte dann die toString()-Methode, die den Namen so liefert, wie er angezeigt werden soll. Ansonsten sind halt alle personenbezogenen Daten in dieser Klasse und irgendwo hast du nene Vector oder ne HashMap oder so, wo du für jede Person eine Instanz deiner Klasse drinhast.

Das TreeModel ist die Datenbasis für einen JTree. Dazu musste dir hier im Forum mal die HowTos/Tutorials anschauen.


```
public class Person{
    private String nachname;
    private String vorname;

...

    public String toString() {
        return nachname + ", " + vorname;
    }
}

public class PersonTreeModel
    implements TreeModel {
    // hier kommen die Personen rein
    private Vector persons = new Vector();

    // Konstruktor, dem die ganzen Personen als Vector übergeben werden
    public PersonTreeModel(Vector data) {
        // Kopie vom Vector nutzen, anstatt Referenz
        persons = data.clone();
    }

...

}
```


----------

