Stuecklistenposition - JTree

CyrusOne

Mitglied
Hy leute, folgendes Problem

Ich habe folgende Datenbankeinträge in einer colum.

1
1.1
1.2
2
1.3
2.1
1.4
1.3.1
1.3.2
2.1.1

Jetzt moecht ich ein JTree befuellen das der aufbau so aussieht

root
>1
>>1.1
>>1.2
>>1.3
>>>1.3.1
>>>1.3.2
>>1.4
>2
>2.1
>2.1.1

Dieses "Sortierung" wird bei Stuecklistenpositionen verwendet. Nur zum verstaendniss warum ich es benötige =)

Hierbei ist nicht das Problem die Syntax zur befuellung des JTrees, (root.add(leaf))
sondern die logig die ich dazu benötige um die Postitionssortierung richtig anzuzeigen.
Weil ja die DB einträge nicht so vorhanden sind wie ich sie, und zwar sortiert in jenem Format, benötige.
Vielleicht hat jemand eine Idee!

Baba Cyrus
 
Ich würde mir die Enträge in int Werte umwandeln(Punkte raus).
Dann wurde ich sie mir sortieren lassen (aufsteigend).
Dann die Punkte wieder hinzufügen.

An die Entscheidung in welchen Teilbaum der Eintrag gehört:

einfach die Einträge von oben nach unten mit dem jeweiligen vergleichen und da unterordnen wo die Schnittmenge am größten ist schnittmengen merken und da wo sie am Größten ist unterordnen.

Beispiel1:

1.3 vergleichen mit 1 --> Schnittmenge 1 --> merken
1.2 --> Schnittmenge 1 ---> keine Erhöhung

Beispiel2:

1.2.4 vergleichen mit 1 --> Schnittmenge 1 --> merken
1.1 --> Schnittmenge 1 ---> keine Erhöhung
1.2 --> Schnittmenge 2 ---> merken
1.2.3-->keine Verbesserung
1.3 --> keiner Verbesserung
...
 
Also die Sache mit dem Sortieren hat sich erledigt!
Ich bin davon ausgegangen das ein "ORDER BY" bei der Abfrage nicht die gewuenschte sortierung erfolgt. Aber so kann man sich täuschen! =)

Also ich habe es (bis jetzt) so geloest.

Ich laufe die Ergebnisse der DB durch, sie sind ja jetzt schon sortiert.
Uberpruefe die laenge des Strings,
Ist die Laenge 1 so wird an "Root" angehaengt; diesen "Node" (Level2) merke ich mir, denn
Ist die Laenge 3 so haenge ich an den gemerkten "Node" (Level2) diesen neuen "Node" (Level3) merke ich mir auch, denn
ist die Laenge 5 so haenge ich das neue Element an den Level3-Node
und das ganze wieder von vorne.

Code:
while (rs.next()){
    if(rs.getString(2).length()==1){
	root.add(new DefaultMutableTreeNode(rs.getString(2)));
	level2 = root.getLastLeaf();
     }else if(rs.getString(2).length()==3){
	level2.add(new DefaultMutableTreeNode(rs.getString(2)+);
	level3=root.getLastLeaf();
     }else if(rs.getString(2).length()==5){
	level3.add(new DefaultMutableTreeNode(rs.getString(2));
     }
}

Das ganze ist leider sehr undynamisch, denn sobald ich einen neues "level" bekomme muss ich den Code neu schreiben.
Aber zumindest ist es ein anfang!


@dontschew
Danke fuer deine rasche Antwort!
Aber leider kann ich mir unter deiner erklaerung nicht viel vorstellen.
Liegt bestimmt an mir ...


Lg Cyrus
 
Dabei ab ich mir solche Mühe gegeben es richtig zu erklären.

Ich versuche es nochmal.
Stell dir vor du hast 1.2.4.3 die du in einen vorhandenen Baum zuordnen willst
sagen wir in
-1
--1.1
---1.1.1
---1.1.2
----1.1.2.1
--1.2
---1.2.1
----1.2.1.4
---1.2.3
---1.2.4
---1.2.5
----1.2.5.1

so jetzt gehst du den Baum von oben nach unten durch und vergleichst jeden Wert mit
1.2.4.3
(die Punkte beim Vergleich nicht beachten)

erster vergleich(Zeichen von vorn nach hinten)
1 mit 1.2.4.3 --> Schnittmenge 1 da ein zeichen gleich

2ter Vergleich
1 mit 1.1 --> Schnittmenge 1 da 1 Zeichen gleich (1) --> merken(nur merken wenn sich Schnittmenge erhöht)

step 3

step 4

step 5
1.1.2.1 mit 1.2.4.3 --> Schnittmenge 1 da 1 Zeichen gleich (1)

step 6
1.2 mit 1.2.4.3 --> Schnittmenge 2 da 2 Zeichen gleich (2) --> merken

step 7
1.2.1 mit 1.2.4.3 --> Schnittmenge 2 da 2 Zeichen gleich (1 & 2) --> merken

...
...
step 10
1.2.4 mit 1.2.4.3 --> Schnittmenge 3 da 3 Zeichen gleich (1 & 2 & 4) --> merken

....
....
....


am Ende hast du deinen pointer genau bei 1.2.4 stehen da an dieser Stelle das erste mal die Schnittmenge 3 (am größten war) und unter diesem Punkt musst du den neuen einfügen


So jetzt hab ich mir aber sie größte Mühe gegeben
 
Bin zeitlich sehr gebunden aber versuche gern die zeit zu finden, versprechen kann ichs nicht.
 
Zurück