2016-11-25 2 views
0

Ich habe mich in einer Ecke mit einer CheckBoxTreeItem gesichert, weil ich die Funktionalität es (die Möglichkeit, alle Kinder überprüft, ob Eltern aktiviert ist), aber meine Eltern hat eine Hyperlink als die Grafik, während meine Kinder Strings als ihre Grafik haben. Java mag es nicht, wenn Sie eine TreeView haben, die zwei verschiedene Typen enthält (CheckBoxTreeItem<Hyperlink> und CheckBoxTreeItem<String>). Meine Optionen bestehen darin, eine TreeView zu erstellen, die einen generischen Typ akzeptiert oder eine Möglichkeit findet, Hyperlinks als Nur-Text anzuzeigen. Ich habe ein paar Stunden mit der generischen Typ-Option gebastelt, aber ich kann es nicht funktionieren lassen. Ich bin eher geneigt, Hyperlinks zu modifizieren, aber ich werde für jeden Rat dankbar sein.TreeView mit verschiedenen Typen

Antwort

0

Wenn Sie einen Node-Typ hinzufügen möchten, können Sie die graphic-Eigenschaft von verwenden.

@Override 
public void start(Stage primaryStage) { 
    CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>(null, new Hyperlink("abc")); 
    CheckBoxTreeItem<String> item2 = new CheckBoxTreeItem<>("Hello World"); 
    CheckBoxTreeItem<String> item3 = new CheckBoxTreeItem<>("42"); 
    item.getChildren().setAll(item2, item3); 

    TreeView<String> treeView = new TreeView<>(item); 
    treeView.setCellFactory(CheckBoxTreeCell.forTreeView()); 

    Scene scene = new Scene(treeView); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Alternativ, wenn der TreeItem Wert der Node enthält, müssen Sie die updateItem Methode der CheckBoxTreeCell ein wenig ändern:

CheckBoxTreeItem<Object> item = new CheckBoxTreeItem<>(new Hyperlink("abc")); 
CheckBoxTreeItem<Object> item2 = new CheckBoxTreeItem<>("Hello World"); 
CheckBoxTreeItem<Object> item3 = new CheckBoxTreeItem<>("42"); 
CheckBoxTreeItem<Object> item4 = new CheckBoxTreeItem<>(new Hyperlink("def")); 
item.getChildren().setAll(item2, item3, item4); 

TreeView<Object> treeView = new TreeView<>(item); 
treeView.setCellFactory(tv -> new CheckBoxTreeCell<Object>() { 

    private final HBox graphicWrapper = new HBox(); 

    { 
     graphicWrapper.setAlignment(Pos.BASELINE_LEFT); 
    } 

    @Override 
    public void updateItem(Object item, boolean empty) { 
     graphicWrapper.getChildren().clear(); 
     super.updateItem(item, empty); 

     if (!empty && (item instanceof Node)) { 
      // replace graphic & text 
      setText(null); 
      graphicWrapper.getChildren().setAll(getGraphic(), (Node) item); 
      setGraphic(graphicWrapper); 
     } 
    } 

}); 
+0

mit Methode Nummer eins ging. Lief wie am Schnürchen. Stellen Sie sicher, dass für die Leser die setCellFactory-Zeile enthalten ist. Ansonsten erhalten Sie eine TreeView von nur Strings, keine CheckBoxen. – mpowell48

Verwandte Themen