SWING: JTree mit vielen Knoten (5000-50000)



  • Hallo,

    ich entwerfe gerade eine Anwendung die helfen soll, sehr große Datenmengen zu verarbeiten. Die Datenmenge A muss sozusagen zu einer Datenmenge B transformiert werden. Dabei soll meine "kleine" Anwendung helfen. Konkret stelle ich mir für den Benutzer das folgende vor:

    Es gibt in der Anwendung zwei JTree-Controls.

    |----------------------
    | |-------| |-------| |
    | |Tree1  | |Tree2  | |
    | |       | |       | |
    | |       | |       | |
    | |       | |       | |
    | |       | |       | |
    | |-------| |-------| |
    | button1 button2 ... |
    -----------------------
    

    Im Tree1 werden sehr viele Knoten auf verschiedenen Ebenen angezeigt. Die erste Ebene enthält 300 Knoten, die zweite für jeden Knoten nocheinmal 50 die dritte nocheinmal 20 usw. Es können also sehr viele Knoten im Baum vorkommen. In den Bäumen soll man noch per Drag & Drop arbeiten können und einige Knoten sollen anders dargestellt werden (andere Hintergrundfarbe, Icons, fetter oder kursiver Text). Der Nutzer soll nun gleiche Knoten (welche auf verschiedene Zweige verteilt sind) finden und diese in Tree2 übertragen. Das finden ist kein Problem, ansonsten gibts noch ein paar Dialog die das finden von Duplikaten und die Übername in den 2. Tree erleichtern.

    Meine Frage ist jetzt: Ist JTree überhaupt in der Lage so große Mengen von Knoten darzustellen, ohne dass die Anwendung bei jeder Aktion (Drag & Drop) oder bei jedem neu Zeichnen des Trees einfriert?

    Ich glaube nicht dass ein Nutzer jemals alle Knoten aufklappen wird. Jedenfalls ist vorerst auch kein "Expand All" Feature geplant. Aber man weis ja nie was noch kommen mag.

    Vielleicht habt ihr ja auch bessere Ideen. Ich bin jedenfalls für jeden Vorschlag dankbar.



  • Solange der Baum lazy ist sollte das klappen, aber du musst halt brav Öffnen/Schließen.

    MfG SideWinder



  • Hm... dass heist man sollte also nie zu viele Knoten geöffnet haben. Was genau sollte denn deiner Meinung nach am Baum lazy sein.

    Ich hatte vor zur Laufzeit immer mal wieder ein Paar Knoten im (linken, großen) Baum zu "highlighten". Und wenn ein Knoten nicht sichtbar ist, dann soll sein Elternknoten gehighlighted werden. Ist der wiederum nicht sichtbar dann der nächste Elternknoten usw...

    Dazu müsste man doch aber eigentlich in jedem Fall ein neu Zeichnen des Baums erzwingen. Und wenn ich nicht gerade durch jeden Knoten iterieren will, dann müsste ich eigentlich auch irgendwo Informationen abspeichern, ob ein Knoten im Moment sichtbar ist oder nicht.



  • Chris++ schrieb:

    Hm... dass heist man sollte also nie zu viele Knoten geöffnet haben. Was genau sollte denn deiner Meinung nach am Baum lazy sein.

    Ich hatte vor zur Laufzeit immer mal wieder ein Paar Knoten im (linken, großen) Baum zu "highlighten". Und wenn ein Knoten nicht sichtbar ist, dann soll sein Elternknoten gehighlighted werden. Ist der wiederum nicht sichtbar dann der nächste Elternknoten usw...

    Dazu müsste man doch aber eigentlich in jedem Fall ein neu Zeichnen des Baums erzwingen. Und wenn ich nicht gerade durch jeden Knoten iterieren will, dann müsste ich eigentlich auch irgendwo Informationen abspeichern, ob ein Knoten im Moment sichtbar ist oder nicht.

    Google ist dein Freund. Man kann prüfen ob ein Knoten sichtbar ist oder nicht.

    http://stackoverflow.com/questions/2822695/java-jtree-how-to-check-if-node-is-displayed


Log in to reply