Wie man sieht, hänge ich die ganze Baumstruktur an einer TreeItem-Root-Node auf. Die möcht ich aber weghaben, und nur den XML-Baum. Hat jemand einen Vorschlag, wie ich die auf intelligente Weise wegbekomme? Es gibt bestimmt einen Ansatz, bei dem man die root-Node auf diese Weise gar nicht braucht, um eine Referenz auf den TreeItem-Baum zu erhalten.
Danke euch
Danke euch
Java:
package com.test;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom2.*;
import org.jdom2.input.*;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
public class MainWindow extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File("file4.xml");
TreeItem<String> rootItem = new TreeItem<String>("root");
rootItem.setExpanded(true);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
traverse(root, rootItem);
} catch (Exception ex) {
}
TreeView<String> tree = new TreeView<String>();
tree.setRoot(rootItem);
StackPane root = new StackPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 300, 350));
primaryStage.show();
}
public static void traverse(Element current, TreeItem curItem) {
String attr = current.getAttributeValue("name");
String label = attr;
TreeItem<String> newItem = new TreeItem<String>(label);
newItem.setExpanded(true);
curItem.getChildren().add(newItem);
List children = current.getChildren();
Iterator iterator = children.iterator();
while (iterator.hasNext()) {
Element child = (Element) iterator.next();
traverse(child, newItem);
}
}
}