Jtree zu langsam beim klappen

Status
Nicht offen für weitere Antworten.
T

_tiGGa_

Gast
hallo,

ich hab ein problem
und zwar ^^

ich hab eine klasse, welche mir den gesamten jtree aufklappt bzw. zuklappt.
in meinem jtree habe ich unterschiedlich viele rows, mal 100 mal 1000, mall 5000

wenn ich 100 rows habe, geht es wunderbar schnell,
sind es aber 1000, oder noch mehr brauch er ewig.

dabei muss ich sagen, ich hab mir einen eigenen renderer geschrieben,
da ich verschiedene symbole für verschiedene zeilen haben möchte.
ich setze jedoch, bevor ich den jtree aufklappe den renderer auf null, und danach wieder auf meinen.
dies mache ich, da ich schon gemerkt hab, dass es schneller geht.

desweiteren sind die eigenschaften visible und enable bevor ich die methoden aufrufe auf false gesetzt.

kann man diesen code vielleicht noch verbessern?
bzw. kann man vielleicht auch mit dem modell arbeiten?

>1000 rows benötigt er > 3 min für das aufklappen,
zum zuklappen ca. 30sec.

codeschnipsel:
Code:
public void aufklappen(JTree tree, boolean expand) {
      TreeCellRenderer temp_speicher = tree.getCellRenderer();
      tree.setCellRenderer(null);   	    	
      TreeNode root = (TreeNode)tree.getModel().getRoot(); 
       
        if (expand) {
            alle_aufklappen(tree);         
        } else {
           alle_zuklappen(tree);
        }               
       tree.setCellRenderer(temp_speicher);       
}

 public void alle_aufklappen(JTree tree) { 
        int row = 0; 
        
        while (row < tree.getRowCount()) {
          tree.expandRow(row);
          row++;
          }
} 
    
public void alle_zuklappen(JTree tree) { 
        int row = tree.getRowCount(); 
        while (row > 0) {
          tree.collapseRow(row);
          row--;
          }
}

danke und hoffe ihr könnt mir weiterhelfen :)

greetz
_tiGGa_
 

AlArenal

Top Contributor
Code:
    // If expand is true, expands all nodes in the tree.
    // Otherwise, collapses all nodes in the tree.
    public void expandAll(JTree tree, boolean expand) {
        TreeNode root = (TreeNode)tree.getModel().getRoot();
    
        // Traverse tree from root
        expandAll(tree, new TreePath(root), expand);
    }
    private void expandAll(JTree tree, TreePath parent, boolean expand) {
        // Traverse children
        TreeNode node = (TreeNode)parent.getLastPathComponent();
        if (node.getChildCount() >= 0) {
            for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                TreeNode n = (TreeNode)e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                expandAll(tree, path, expand);
            }
        }
    
        // Expansion or collapse must be done bottom-up
        if (expand) {
            tree.expandPath(parent);
        } else {
            tree.collapsePath(parent);
        }
    }

Was deinen Code angeht:
Also note that performance wise, this probably has complexity O(n*n) (depending on the layout you are using for your tree).

I prefer this code to collapse all nodes:

Code:
JTree jtree;
for (int i = jTree.getRowCount() - 1; i >= 0; i--) {
         jTree.collapseRow(i);
}


If you want to collapse all nodes except the first level, change the condition in the for-statement to i >= 1.

Selbst benutze ich weuder ne andere Variante.. da ich nun aber schnell zum Schnitzel-Essen muss, bin ich zu faul zum suchen.

Schönen Feierabend! :)
 
T

_tiGGa_

Gast
hmm, also, die methoden mit der rekursion hatte ich auch schon benutzt, nur diese brauchen eine noch längere zeit.

zu der anderen methode fürs zuklappen, diese is ja eigentlich die gleiche wie meine, nur das es eine for-schleife is.

hab mir noch paar gedanken gemacht, ruft der jtree vielleicht eine interne repaint methode auf?
so dass er jedes element, welches aufgeklappt ist, gleich neuzeichnen möchte?

ich hab ja schon einen eigenen renderer geschrieben, doch vielleicht gibt es noch was anderes?

danke für eure hilfe

greetz
_tiGGa_
 
T

_tiGGa_

Gast
sry, wegen dem doppelposting, doch manchmal spinnt die inetverbindung auf arbeit

hab noch bissel rumgetestet, aber irgendwie bringt es nix.

das höchste was vorkommen kann, sind knappe 100.000 zeilen im jtree ^^

nun hab ich mir überlegt, ich klappe nicht alles auf, sondern nur immer das, wass der user sieht + bissel toleranz
und sobald der user weiter scrollt, klappe ich wieder etwas auf, somit erscheint es, als ob alles aufgeklappt wäre.

nur wie geh ich da am besten ran?
mein jtree liegt in einem jscrollpane.

hab zur zeit garkeine idee.
bitte helft mir :)

danke
_tiGGa_
 
T

_tiGGa_

Gast
hmmm, is aber leider so.
dies is ein projekt was eine xml-datei einlesen, die bestimmte daten enthält, welche später weiter verarbeitet wird.
und das jtree macht bestimmte fehler sichtbar, sodass man diese beheben kann, die anwender möchten allerdings auch mal die gesamte xml durchstöbern, deshalb muss ich das jtree aufklappen, und alle elemente sichtbar darstellen.

also, frag ich mich, ob dies auf einem weg umsetzbar is?
 

AlArenal

Top Contributor
Ich sag mal so:
Keiner hat nen Bildschirm um 100.000 Zeilen anzuzeigen. Also könnte man ggf. auch das Aufklappen mit dem Scrollen des sichtbaren Bereichs synchronisieren. Nur so als Gedankenspiel.
 
T

_tiGGa_

Gast
heheeee,

na das hab ich ja schon oben gepostet, nur such paar ansatzmöglichkeiten (s.o.) :)

greetz
_tiGGa_
 

AlArenal

Top Contributor
JTree liest aus naheliegenden Gründen nur die Daten aus dem Model, die er zur Anzeige brauchst. Wenn du den kompletten Tree expanden willst, setzt das als Flag ins Model und sorge dafür, dass bei Zugriff auf einen Node geprüft wird, ob dieser im Tree sichtbar ist. Wenn ja, expandesst du alle seine Children (wenn vorhanden).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
E Swing Jtree Allgemeine Java-Themen 9
R JTree - Mehrere Roots Allgemeine Java-Themen 6
DStrohma Icons in JTree Nodes weiter nach rechts rücken Allgemeine Java-Themen 2
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
DStrohma Jede node in JTree mit eigenem Icon Allgemeine Java-Themen 7
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
S JAVA JTree rekursiv umschreiben Allgemeine Java-Themen 5
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
N JTree nicht genutzte Pfade schließen Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
G JTree Node verschieben Allgemeine Java-Themen 2
MQue leerer JTree Allgemeine Java-Themen 6
MQue JTree Allgemeine Java-Themen 6
MQue JCheckBox in JTree Allgemeine Java-Themen 2
F JTree in Jsp Allgemeine Java-Themen 2
T Äquivalent zu JTree Allgemeine Java-Themen 4
C JTree: ActionListener auf die Nodes Allgemeine Java-Themen 3
M JTree mit Rechtsklick markieren Allgemeine Java-Themen 4
C JTree: Nodes automatisch öffnen Allgemeine Java-Themen 2
P JTree/ Nodes einfügen Allgemeine Java-Themen 2
P JTree Allgemeine Java-Themen 6
P aus JTree eine XML- Datei Allgemeine Java-Themen 6
P Vector auf JTree Allgemeine Java-Themen 6
P JTree Farbe Allgemeine Java-Themen 14
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E JTree (schonwieder) - TreeCellEditor Allgemeine Java-Themen 9
E JTree - einzelnes Element (Knoten) editieren Allgemeine Java-Themen 2
E JTree - Selektieren mit Rechtsklick Allgemeine Java-Themen 15
P JTree ID vergeben Allgemeine Java-Themen 3
P JTree Allgemeine Java-Themen 4
P JTree/ JTabbedPane Allgemeine Java-Themen 34
L JTree Allgemeine Java-Themen 23
E root JTree Allgemeine Java-Themen 2
E Child in JTree hinzufügen Allgemeine Java-Themen 4
E JTree in NetBeans Allgemeine Java-Themen 2
R Objekt an Knoten von JTree anhaengen Allgemeine Java-Themen 2
R Daten aus Baum entsprechend in jTree einfuegen Allgemeine Java-Themen 2
S JTree - Brett vor'm Kopp Allgemeine Java-Themen 19
G Baumhierarchie in JTree eintragen Allgemeine Java-Themen 4
K JTree - Knoten expandieren Allgemeine Java-Themen 4
K JTree Inhalt löschen und Anzeige aktualisieren Allgemeine Java-Themen 13
G JTree automatisch sortieren lassen Allgemeine Java-Themen 5
Luma Diskettenlaufwerk rattert los bei Eintrag in JTree Allgemeine Java-Themen 6
G in Jtree suchen Allgemeine Java-Themen 2
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
P Eclipse langsam/unbrauchbar bei größeren Quelldateien? Allgemeine Java-Themen 8
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
M Externe Jar sehr langsam Allgemeine Java-Themen 23
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
B util.Timer zu langsam? Allgemeine Java-Themen 3
W Java Applet läuft langsam Allgemeine Java-Themen 2
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
B JavaPanels langsam schliessen und öffne Allgemeine Java-Themen 6
L Java Debugmodus ist unerträglich langsam! Allgemeine Java-Themen 30
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
H JID3 + vdheide schreiben zu langsam Allgemeine Java-Themen 11
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
T ObjectOutputStream#writeObject() zu langsam. Allgemeine Java-Themen 13
N Berechnungsthreads zu langsam. Allgemeine Java-Themen 2
G Java Socket langsam unter Linux Allgemeine Java-Themen 21
T String.split() - viel zu langsam Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
W sin und cos bei hohen Werten extrem langsam Allgemeine Java-Themen 12
G Domainen crawlen & Domainnamen listen -> LANGSAM! Allgemeine Java-Themen 19
M Performance enorm langsam Allgemeine Java-Themen 26
H java.util.Vector langsam ? Allgemeine Java-Themen 5
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
H Verschlüsselungsprogramm zu langsam Allgemeine Java-Themen 12
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
T Bilder bearbeiten unglaublich langsam Allgemeine Java-Themen 9
H Entpacken sehr langsam Allgemeine Java-Themen 10
C Thread zu langsam ==> kann doch nicht sein oder? Allgemeine Java-Themen 9
R Double Buffering zu langsam Allgemeine Java-Themen 11
D ganze packete importieren --> langsam? Allgemeine Java-Themen 9
G Funktion, die langsam wächst Allgemeine Java-Themen 7
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Stringmanipulationen beim Dateinamen Allgemeine Java-Themen 8
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
J Mein Frame friert ein beim Uploaden Allgemeine Java-Themen 4
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
A Hilfe beim Verständnis Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben