JTree Probleme

HazelNut

Mitglied
Hey ich benötige da einige Hilfe mit dem Umgang vom JTree.

Hintergrund:
Ich habe drei Klassen: CommonType, Collection und Literal, welche von CommonType erben
Eine Collection kann weitere Collections oder Literale enthalten.

Was ich brauche:
Das eben Collections als Ordner angezeigt werden und Literale als Leafs.
Es soll eine Ordnung verfügbar sein, also nach Name, Datum, Kunde,....
Ein Suchfenster, als Filter, bei dem dann alle Nodes ausgefiltert werden welche nicht dem pattern passen, jedoch sollen wenn der pattern jetzt auf einen Ordner passt sämtliche Unterordner und Literale ebenfalls angezeigt werden, ob es umgekehrt auch so sein soll,(also, dass ein pattern auf ein Literal passt aber nicht auf ein Collection) und dann trotzdem die ganze Hierarchie angezeigt werden soll weiß ich bisher nicht.
Eine Möglichkeit neue Nodes zur Laufzeit zu erstellen.

Problem:
Ich verstehe JTree nicht wirklich, und ja ich habe das Tutorial bereits mehrmals durchgeschaut und auch Andere.
Ich dachte eigentlich, dass ich die Daten dem Model hinzufügen müsste, aber jetzt sehe ich wieder Beispiele, welche komplett ohne Model auskommen, aber dafür DefaultMutableTreeNodes verwenden um die Daten anzuzeigen, was ist da jetzt genau der Unterschied?
Im Moment mache ich meine Unterscheidung im Model bei isLeaf, ob es eines ist oder nicht.
Soll ich jezt eine Klasse MyNode erstellen, welche von Mutable erbt und dann dort die Unterscheidung für die Objekte machen oder weiterhin das Model verwenden?
Wenn ich das richtig verstanden habe übergebe ich MyNode einfach ein CommonType und intern arbeitet der dann immer mit MyNode?
In einem anderen Thread hat mir jemand gesagt, ich solle die sortierung in children() übernehmen, aber die gibt mir im Endeffekt doch nur eine Liste aller childs zurück.

"TreeModel weiß nicht wie die Knoten dargestellt werden", heißt dass soviel wie, dass ich die Unterscheidung von Collection/Literal im Mutable machen soll und die sortierung im Model?
 

Timothy Truckle

Top Contributor
"TreeModel weiß nicht wie die Knoten dargestellt werden", heißt dass soviel wie, dass ich die Unterscheidung von Collection/Literal im Mutable machen soll und die sortierung im Model?
Ja.

Für das Filtern solltest Du Deinem CommonType eine
Code:
boolean isMatching(/* suchkriterium */ )
spendieren. Dann kann eine MutableNode sein Objekt danach fragen. Der übergeordete DefaultMutableTreeNode fragt dann seinerseits alle seine Kinder, ob sie dieses Kriterium erfüllen, und zwar in
Code:
getChildCount()
und
Code:
children()
, dann verwendet es der Tree automatisch.

bye
TT
 

HazelNut

Mitglied
Hmm, okay.
Irgendwie ist das komisch, dem Model wird nur der root hinzugefügt sonst nix. Und diesem Root werden alle anderen Nodes angeheftet. Irgendwie komplett anders als für was sonst Models verwendet werden.
Und in anderen Beispielen wird wieder alles direkt dem Model hinzugefügt.

Jedenfalls habe ich jetzt mal ein MyNode gemacht welches eben ein CommonType entgegennimmt.
Mein Model verwendet jetzt komplett MyNode.
Im Moment wird mir nix angezeigt, außer dem Root.

Mein Code:

Java:
MyNode root= new MyNode(new Literal("asdf"));
MyTreeModel model = new MyTreeModel(root);
root.add(new MyNode(new Literal("01")));
Collection vertrieb =new Collection("Vertrieb");
vertrieb.add(vieeeelesachen);
root.add(new MyNode(vertrieb));

Nun, wird nur asdf angezeigt.
MyNode überschreibt toString und hat eine Methode getName.
getName() wird von cellrenderer verwendet um den Namen zu setzen.
Im Model habe ich eine HashMap in die, die ganzen nodes beinhaltet (hoffentlich).
 

bERt0r

Top Contributor
Entweder du baust dir aus Treenodes einen Baum oder du hast ein Treemodel, welches dir irgendeine Datenstruktur in ein Baumformat übersetzt. Bei deinen Klassen sieht es ja so aus, als wären die schon in einer Baumähnlichen Struktur. Ein Treemodel müsste jetzt dem JTree sagen wie die Struktur aussieht. Die Icons sind dann wieder ein anderes Thema, das betrifft dann nur den TreeCellRenderer. Am einfachsten wäre es wohl, du baust dir einen Baum aus DefaultMutableTreeNodes, setzt deinen jeweiligen CommonType als Userobject und im TreeCellRenderer fragst du dann ab UserObject instanceof Collection oder Literal.
 
Zuletzt bearbeitet:

HazelNut

Mitglied
Soo, ich bin wieder da :)
Also ich habe jetzt MyNode so umgeschrieben, dass es eben nachschaut ob es ein Collection oder Literal übergeben wird und added dann rekursiv die entsprechenden childs.
Leider wird in meinem Tree nach wie vor ncihts angezeigt.
Jetzt habe ich stat meinem Model mal den DefaultModel verwendet und bei dem "funktioniert" es.
Es werden keine + bzw - angezeigt.
Und die Reihenfolge ist auch nicht korrekt.
Sprich, ich adde ein Collection, welches childs hat, diese childs werden dann jedoch auf einer Ebene mit root angezeigt.
Was muss ich denn in meinem Model machen, dass wenigstens etwas angezeigt wird und eine korrekte Erstellung zu stande kommt?
 

bERt0r

Top Contributor
Du wirst den Code in deinem Model anders gestalten müssen, der macht wohl nicht das was er soll.

Wie sollen wir dir irgendwelche Diagnosen/Ratschläge geben, wenn du uns deinen Code nicht zeigst? Und wie es "korrekt" aussehen soll kann sich von uns auch keiner vorstellen...
 

HazelNut

Mitglied
Na, das habe ich mir schon fast gedacht ;)

Mal meine main:

Java:
CollectionType vertrieb = new CollectionType("Vertrieb");
vertrieb.add(new LiteralType("data1");
vertrieb.add(new LiteralType("data2); ......

MyNode root = new MyNode(new CollectionType("root"));
defaulttreemodel model= new defaulttreeModel(root);
root.add(new MyNode(vertrieb);
root.add(new MyNode(new LiteralType("fancyData");
...new JTree(model)

Dann MyNode:

Java:
myNode extends DefaultmutableTreeNode{

String name;
CommonType entry;

MyNode(CommonType entry){
super(entry);
this.entry = entry;
this.name=entry.getName();
}

void add(MyNode child){

CommonType child1=child.getEntry();

   if(child1 instanceof CollectionType){
         if(child1.hasChilds()){
              super.add(child);
             add(child1.getChilds());
          }
   if(child1 instanceof LiteralType){
     super.add(child1);
 
}

void add(ArrayList<CommonType> childs){
    for(CommonType entry : childs){
         if(entry instanceof CollectionType){
             super.add(new MyNode(entry));
            if(entry.hasChilds())
            add(entry.getChilds());
          }
       if(instanceof LiteralType){
         super.add(new MyNode(entry));
}}
}

So, wenn ich das mit DefaultMutableModel mache erhalte ich steht zuerst fancyData, dann auf gleicher Ebene Vertrieb und danach weiter nach links verschoben data1 und data2.
Jetzt würde ich gerne mal wissen, wie ich das entsprechende Collection als Ordner mit der richtigen Hierarchie anzeigen kann und ein eigenes passendes Model schreibe, welches etwas anzeigt.
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Wenn du eine eigene Klasse die von DefaultMutableTreeNode erbt hast und aus der einen Baum baust brauchst du kein TreeModel. Du kannst einfach den root Knoten per setRoot dem JTree verpassen. Deine add Methode ist übrigens so sicher nicht richtig. Mir ist nicht ganz klar was du damit erreichen willst, guckt dir gegebenenfalls ein Beispiel wie man einen simplen Baum macht an.
 

HazelNut

Mitglied
Hmm irgendwie sagt jeder was anderes...
Naja meine beiden Klassen sind ja praktisch wie wein Baum aufgebaut.
Wenn ich dem root MyNode jetzt eine Collection oder Literal adde dann wird halt nachgeschaut, ob das jeweilige Objekt Kinder hat, wenn ja werden diese rekursiv angehängt.

Wie mache ich es dann richtig?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing JTree UI Probleme AWT, Swing, JavaFX & SWT 6
D Swing Probleme mi JTree & TreeModeln usw AWT, Swing, JavaFX & SWT 5
T Probleme mit JSplitPane, JScrollPane, JTree AWT, Swing, JavaFX & SWT 3
R Probleme mit JTree / setUserObject() AWT, Swing, JavaFX & SWT 4
L Probleme mit JTree AWT, Swing, JavaFX & SWT 3
C JTree bereitet große Probleme, kann uns bitte jemand helfen! AWT, Swing, JavaFX & SWT 6
K Probleme mit der Anzeige eines einzigen Nodes in einem JTree AWT, Swing, JavaFX & SWT 9
D JTree Drag and Drop / drop - Probleme AWT, Swing, JavaFX & SWT 4
G Probleme mit JTree: "pathByAddingChild" NPExceptio AWT, Swing, JavaFX & SWT 2
K Probleme mit Listener für JTree AWT, Swing, JavaFX & SWT 4
M JTree Probleme AWT, Swing, JavaFX & SWT 6
FrittenFritze JTree, LazyLoading und "Rückwärtstraversion" AWT, Swing, JavaFX & SWT 3
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
Z Swing JTree DefaultMultipleTreeNode Repräsentation ändern AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
W Swing Anzeigefehler bei JTree AWT, Swing, JavaFX & SWT 1
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
S JRadioButton und JCheckBox im JTree AWT, Swing, JavaFX & SWT 14
H Swing JTree: Zählt der rootNode mit? AWT, Swing, JavaFX & SWT 2
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
R JTree behandeln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
U dynamisches JTree erstellen AWT, Swing, JavaFX & SWT 2
J JTree updaten AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
T JTree mit Symbolen? AWT, Swing, JavaFX & SWT 8
R Anfängerfrage: Ansichten des JTree AWT, Swing, JavaFX & SWT 1
H Swing JTree Minimumgröße AWT, Swing, JavaFX & SWT 2
F Swing JTree + DiffUtils // Markierung Nodes aufheben AWT, Swing, JavaFX & SWT 2
I JTree wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Swing JTree AWT, Swing, JavaFX & SWT 4
M Nodes in JTree nicht anzeigen AWT, Swing, JavaFX & SWT 0
T JTree mit Cloud verbinden AWT, Swing, JavaFX & SWT 0
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
J Auf Dateien in JTree zugreifen AWT, Swing, JavaFX & SWT 15
F jTree.startEditingAtPath(path); funktioniert nicht bei eigenem CellEditor? AWT, Swing, JavaFX & SWT 8
D Swing JTree Steuerung AWT, Swing, JavaFX & SWT 11
S Swing JTree verwirrt mich AWT, Swing, JavaFX & SWT 2
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
J JTree speichern AWT, Swing, JavaFX & SWT 4
N Swing JTree TreeCellRenderer mit html und automatischen Zeilenumbruch AWT, Swing, JavaFX & SWT 8
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
T JTree, Knoten mehrmals verwenden AWT, Swing, JavaFX & SWT 5
B JTree mit Ordneransicht in JPanel einbinden AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
M Swing JTree: Wie kann ich die Hintergrundfarbe der selection ändern?!?! AWT, Swing, JavaFX & SWT 7
D Mehrmals auf Node im JTree klicken AWT, Swing, JavaFX & SWT 2
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
N Swing FileFilter lässt JTree sich nicht öffnen AWT, Swing, JavaFX & SWT 2
X Swing 2 TreeModel und ein JTree synchronisieren AWT, Swing, JavaFX & SWT 3
N Swing JTree TreePath zu Windows Pfad? AWT, Swing, JavaFX & SWT 2
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2
V Swing JTree - Umbenennen selbst handlen. AWT, Swing, JavaFX & SWT 2
E Übergebenem JTree Blätter hinzufügen AWT, Swing, JavaFX & SWT 2
E Wert eines selektierten Knotens in einem JTree auslesen AWT, Swing, JavaFX & SWT 3
A Swing JTree - Nodes expanden AWT, Swing, JavaFX & SWT 2
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
B JTree AWT, Swing, JavaFX & SWT 9
T Menüacceleratoren verschwinden bei JTree AWT, Swing, JavaFX & SWT 5
1 Swing JTree collapse child nodes AWT, Swing, JavaFX & SWT 4
B JTree - sehr individuell AWT, Swing, JavaFX & SWT 3
G Swing JTree - Verbindungslinien entfernen AWT, Swing, JavaFX & SWT 4
A Swing Herausfinden ob bei JTree Klick auf "+"/"-" anahnd x,y AWT, Swing, JavaFX & SWT 2
S Swing JTree und seine Listener... AWT, Swing, JavaFX & SWT 4
L Swing JTree wird nicht selektiert AWT, Swing, JavaFX & SWT 2
P [JTree] Markierhilfe der Drop-Location selber gestalten. AWT, Swing, JavaFX & SWT 4
A JTree aus Pfaden erzeugen AWT, Swing, JavaFX & SWT 3
K Swing Hilfe beim JTree! AWT, Swing, JavaFX & SWT 3
X Datensätze in JTree AWT, Swing, JavaFX & SWT 2
L Update JTree Verzeichnisse AWT, Swing, JavaFX & SWT 9
E JTree Auswahl AWT, Swing, JavaFX & SWT 2
K JTree width der Treenodes auf 100% AWT, Swing, JavaFX & SWT 6
C JTree LastSelectedPathComponent benutzen? AWT, Swing, JavaFX & SWT 3
S Swing JTree Node Text nicht richtig angezeigt AWT, Swing, JavaFX & SWT 2
Landei Swing JTree mit "Tabellenzeilen"? AWT, Swing, JavaFX & SWT 5
Rudolf Swing JTree Node anhand vom Namen finden AWT, Swing, JavaFX & SWT 4
S JTree Elemente nach BaumLevel abspeichern AWT, Swing, JavaFX & SWT 2
Z JTree rootChilds AWT, Swing, JavaFX & SWT 2
D JTree DefaultMutableTreeNode ActionPerformed AWT, Swing, JavaFX & SWT 3
T JTree Daten in DB schreiben am besten SQL AWT, Swing, JavaFX & SWT 21
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
J Lazy Loading eine JTree während Scrollen AWT, Swing, JavaFX & SWT 11
S JTree & JComboBox - Elemente übers Fenster hinaus anzeigen AWT, Swing, JavaFX & SWT 9
E Swing JTree AWT, Swing, JavaFX & SWT 2
J Swing Lazy Loading in JTree wenn gescrollt wird AWT, Swing, JavaFX & SWT 3
N Knotenanordnung in JTree AWT, Swing, JavaFX & SWT 4
S JTree mit Liste zur Speicherung AWT, Swing, JavaFX & SWT 3
S Jtree CheckNode mit JPanel AWT, Swing, JavaFX & SWT 32
G JTree entfernt Nodes nicht AWT, Swing, JavaFX & SWT 12
C Swing JTree und TreeModel AWT, Swing, JavaFX & SWT 15
S Swing JTree wird nicht angezeigt AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben