dynamische Tree View

Hallo zusammen

Ich möchte gerne einen Dynamischen Tree Baum erstellen. Die Daten liegen in einer DB und können zur Laufzeit der Applikation beliebig verändert werden(Items kommen hinzu, werden gelöscht oder werden umbennant). Die Items die hinzukommen, können beliebig tief ineinander geschachtelt werden. Eine TreeView mit ihren TreeItems statisch zu erstellen stellt kein Problem dar. Das dynamisch zu lösen bringt mich ins grübeln. Google konnte mir auch nicht weiter helfen. Ich habe schon einiges versucht. Bis jetzt fand ich noch keine Lösung. Mein Problem betrifft das initialisieren des TreeViews mit seinen Items. Wenn ich die Daten aus der Datenbank lese, dann habe ich folgende Listenstruktur:
Code:
[
  [id, nodeName, parent_id],
  [id, nodeName, parent_id],
  [id, nodeName, parent_id]
]
Jetzt wie erstelle ich aus diesen Daten die Baumstruktur, dass die Verschachtelung stimmt? Wie erwähnt die tiefe der Verschachtelung ist beliebig.

Weiss jemand um Rat.


Statisch würde das so aussehen:
Java:
    @FXML
    private TreeView<String> treeView;
    //... code
    //... code
    private void createTree() {
        TreeItem<String> rootItem = new TreeItem<>("default");

        TreeItem privat = new TreeItem<String>("privat");
        TreeItem gmail = new TreeItem<String>("gmail");
        TreeItem gescheaft = new TreeItem<String>("geschäft");
        TreeItem sonstiges = new TreeItem<String>("sonstiges");

        rootItem.getChildren().addAll(privat, gescheaft, sonstiges);
        privat.getChildren().add(gmail);

        treeView.setRoot(rootItem);
    }

Bildlich dargestellt (Datenbank, Visualisierung) siehe Bild.
 

Anhänge

  • TreeItems-example.PNG
    TreeItems-example.PNG
    26,4 KB · Aufrufe: 18
Zuletzt bearbeitet:
Ich hab die Lösung. Falls es jemanden interessiert, anbei die Lösung.
Für Verbessrungsvorschläge bin ich offen. Falls jemand einen besseren Algorithums kennt, bitte posten.
(Übersichtshalber habe ich die Klasse "Category" als innere Klasse definiert.)

Java:
package app;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.util.*;

public class TreeViewExample extends Application
{
  private TreeItem<String> rootItem = new TreeItem<String>("Inbox");

  private Map<Integer, TreeItem> map = new HashMap<>();
  private List<Integer> tmpList = new ArrayList<>();
  private List<Category> db = new ArrayList<>();

  public static void main(String[] args) {
    launch(args);
  }

  class Category
  {
    private int id;
    private String title;
    private int parent_id;

    Category(int id, String title, int parent_id) {
      this.id = id;
      this.title = title;
      this.parent_id = parent_id;
    }

    public int getId() {
      return id;
    }

    public String getTitle() {
      return title;
    }

    public int getParent_id() {
      return parent_id;
    }
  }

  @Override
  public void start(Stage primaryStage) {
    db.add(new Category(1, "private", 0));
    db.add(new Category(2, "work", 0));
    db.add(new Category(3, "email accounts", 1));
    db.add(new Category(4, "gmail", 3));
    db.add(new Category(5, "data gmail", 4));
    db.add(new Category(6, "twitter account", 1));
    db.add(new Category(10, "customer contacts", 2));

    Iterator<Category> iterator = db.iterator();
    while (iterator.hasNext()) {
      Category currentCategory = iterator.next();

      if (currentCategory.getParent_id() == 0) {
        tmpList.add(currentCategory.getId()); // add id to tmpList
        map.put(currentCategory.getId(), new TreeItem<String>(currentCategory.getTitle()));
        iterator.remove(); // remove added Categories from db;
      }
    }

    // add first TreeItems to rootItem:
    for (TreeItem t : map.values()) {
      rootItem.getChildren().add(t);
    }

    createNestedTree();

    TreeView<String> tree = new TreeView<String>(rootItem);
    StackPane root = new StackPane();
    root.getChildren().add(tree);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
  }

  private void createNestedTree() {
    Iterator<Category> iterator = db.iterator();
    while (iterator.hasNext()) {
      Category c = iterator.next();
      int parentId = c.getParent_id();
      if (tmpList.contains(parentId)) {
        TreeItem<String> parentTree = map.get(parentId);

        TreeItem<String> newChildTree = new TreeItem<>(c.getTitle());
        parentTree.getChildren().add(newChildTree);
        map.put(c.getId(), newChildTree);

        tmpList.add(c.getId()); // add id to tmpList
        iterator.remove();      // remove added Categories from db;
      }
    }

    if (db.size() > 0) {
      createNestedTree();
    }
  }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
M Dynamische Zellengröße und Zeilenumbruch AWT, Swing, JavaFX & SWT 7
M Java FX dynamische Diagramme AWT, Swing, JavaFX & SWT 0
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
S Jtable dynamische Spaltenbreite AWT, Swing, JavaFX & SWT 5
B SWT Dynamische GUI (Layoutmanager?) AWT, Swing, JavaFX & SWT 2
P Dynamische Seite zum basteln für den User AWT, Swing, JavaFX & SWT 8
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
J Java - dynamische Anpassung an Fenstergröße? AWT, Swing, JavaFX & SWT 4
B Swing Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
C Swing Dynamische JComboBox (Filter) AWT, Swing, JavaFX & SWT 28
W "Dynamische JComboBoxes" AWT, Swing, JavaFX & SWT 5
N Swing Dynamische Controls AWT, Swing, JavaFX & SWT 5
C JTable dynamische erweitern AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
N Dynamische JFreechart updated UI nicht AWT, Swing, JavaFX & SWT 5
G Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 4
F Swing Dynamische Größenanpassung AWT, Swing, JavaFX & SWT 4
trash Dynamische JTable (SQL) AWT, Swing, JavaFX & SWT 5
L Dynamische Textgröße bei Buttons AWT, Swing, JavaFX & SWT 3
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
T Swing JTable dynamische Zeilenhöhe AWT, Swing, JavaFX & SWT 5
U Dynamische Panel hinzufügen AWT, Swing, JavaFX & SWT 6
N Swing Dynamische JRadioButtons und Visual Editor AWT, Swing, JavaFX & SWT 4
Q Dynamische Zahl und Positionierung von Objekten AWT, Swing, JavaFX & SWT 5
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
hdi dynamische Iteration über Components AWT, Swing, JavaFX & SWT 3
E Dynamische JComboBox AWT, Swing, JavaFX & SWT 3
F dynamische Ausgabe eines extenen Programms umleiten AWT, Swing, JavaFX & SWT 6
F Dynamische Swing Elemente AWT, Swing, JavaFX & SWT 10
G Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
T Dynamische Anpassung einer jCheckBox AWT, Swing, JavaFX & SWT 11
O Bindings, dynamische Verbindung (Vorbau mit Netbeans) AWT, Swing, JavaFX & SWT 10
G Dynamische Menüs mit Liste von MRU Dateien AWT, Swing, JavaFX & SWT 2
X Dynamische linien (Position und Länge) AWT, Swing, JavaFX & SWT 4
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
S Dynamische Ausgabe im JTextField AWT, Swing, JavaFX & SWT 7
K dynamische jlabels AWT, Swing, JavaFX & SWT 21
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G JTable dynamische Darstellung der ankommenden Daten AWT, Swing, JavaFX & SWT 19
G JTextField & Dynamische Grössenänderung? AWT, Swing, JavaFX & SWT 8
K TableLayout - dynamische Elemente zu spät ge-updated AWT, Swing, JavaFX & SWT 3
O Dynamische Checkboxen AWT, Swing, JavaFX & SWT 21
T Dynamische GUI's AWT, Swing, JavaFX & SWT 10
T Dynamische Look&Feels AWT, Swing, JavaFX & SWT 4
K dynamische Bilder laden AWT, Swing, JavaFX & SWT 5
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
I JavaFX BorderPane ins Tree einfügen AWT, Swing, JavaFX & SWT 11
F Swing Datenmodell in Tree spiegeln ohne Adapterklassen AWT, Swing, JavaFX & SWT 5
T SWT Warum ist mein 1.Tree Node selektiert? AWT, Swing, JavaFX & SWT 11
O Tree path expandieren AWT, Swing, JavaFX & SWT 2
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
J Knotenselect von bestimmten Knoten im Tree AWT, Swing, JavaFX & SWT 2
L SWT tree elemente markieren AWT, Swing, JavaFX & SWT 4
J SWT JFace Tree in Section unsichtbar (Eclipse Forms) AWT, Swing, JavaFX & SWT 5
L SWT Tree reagieren BEVOR selektiert wurde AWT, Swing, JavaFX & SWT 2
S SWT tree collapse AWT, Swing, JavaFX & SWT 4
W SWT Resize Tree-Element AWT, Swing, JavaFX & SWT 3
S Dropdown menu / tree AWT, Swing, JavaFX & SWT 7
P SWT Tree - Keine Selection zulassen AWT, Swing, JavaFX & SWT 4
G Swing Tree wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
B SWT SWT Tree mit mehreren Spalten AWT, Swing, JavaFX & SWT 3
A Swing JTree Tree Node löschen AWT, Swing, JavaFX & SWT 2
K SWT und Tree, wie kann ich TreeItem aus einem Tree entfernen? AWT, Swing, JavaFX & SWT 12
G SWT Tree AWT, Swing, JavaFX & SWT 4
S Tree - ArrayList Zuordnung! AWT, Swing, JavaFX & SWT 13
G Bezeichungen im Tree werden durch . gekürzt? AWT, Swing, JavaFX & SWT 5
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
T TREE AWT, Swing, JavaFX & SWT 3
T Tree AWT, Swing, JavaFX & SWT 2
G tree.setSize tut nicht AWT, Swing, JavaFX & SWT 5
S SWT Tree AWT, Swing, JavaFX & SWT 3
U Baum/Tree nach Benutzer anzeigen AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
R Tree automatisch öffnen AWT, Swing, JavaFX & SWT 7
N Tree automatisch öffnen AWT, Swing, JavaFX & SWT 2
J [SWT] alle Zellen in einem Tree einzeln selektieren AWT, Swing, JavaFX & SWT 2
S TableTree - Tree nicht in erster Spalte AWT, Swing, JavaFX & SWT 5
R Tree-Struktur in einer DB abspeichern AWT, Swing, JavaFX & SWT 15
R Klick in einem Tree erkennen und auswerten AWT, Swing, JavaFX & SWT 6
F Ermittlung der X- und Y- Koordinaten im Tree bei Tastaturst. AWT, Swing, JavaFX & SWT 5
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
C tree action AWT, Swing, JavaFX & SWT 8
G Tree und expand eines bekannten Pfades AWT, Swing, JavaFX & SWT 5
F Tree-Knoten programmgesteuert auswählen AWT, Swing, JavaFX & SWT 3
J Tree nur mit Ordner anzeigen? AWT, Swing, JavaFX & SWT 4
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5
R Nur Verzeichnisse im Tree? AWT, Swing, JavaFX & SWT 5
G verzeichnis tree erstellen AWT, Swing, JavaFX & SWT 2
V Tree Ausgabe Problem AWT, Swing, JavaFX & SWT 2
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben