2016-10-12 4 views

Antwort

0

Entweder geben Sie einfach die Grafik der TreeItem:

TreeItem<String> root = new TreeItem<>("Root", new Rectangle(16, 16, Color.CORAL)); 

etc,

oder eine Zellfabrik verwenden:

TreeView<String> tree = new TreeView<>(); 
tree.setCellFactory(tv -> new TreeCell<String>() { 
    private final Node graphic = new Rectangle(16, 16, Color.CORAL); 
    @Override 
    protected void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 
     setGraphic(empty ? null : graphic); 
     setText(empty ? null : item); 
    } 
}); 

Beachten Sie, dass für große Bäume, die zweite Technik hat die Potenzial, um viel effizienter zu sein, da es nur Grafiken (zwei Knoten in diesem Fall) für jede Zelle erstellt, während die Die erste Technik erstellt Grafiken für jede Element in der Struktur (ob es angezeigt wird oder nicht). Argumentiert (ich würde stark argumentieren), die zweite Technik hat eine bessere Trennung von Bedenken (in der ersten Lösung ist die Grafik Teil der Daten, die einfach nur falsch ist).

SSCCE für die erste Technik:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class TreeGraphicTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     TreeItem<String> root = new TreeItem<>("Root", new Rectangle(16, 16, Color.CORAL)); 
     for (int i = 1 ; i <= 3 ; i++) { 
      root.getChildren().add(new TreeItem<>("Child "+i, new Rectangle(16, 16, Color.CORNFLOWERBLUE))); 
     } 
     TreeView<String> tree = new TreeView<>(root); 
     primaryStage.setScene(new Scene(tree)); 
     primaryStage.show(); 
    } 

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

SSCCE für die zweite Technik:

import javafx.application.Application; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.control.TreeCell; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class TreeGraphicTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     TreeItem<String> root = new TreeItem<>("Root"); 
     for (int i = 1 ; i <= 3 ; i++) { 
      root.getChildren().add(new TreeItem<>("Child "+i)); 
     } 
     TreeView<String> tree = new TreeView<>(root); 
     tree.setCellFactory(tv -> new TreeCell<String>() { 
      private final Node rootGraphic = new Rectangle(16, 16, Color.CORAL) ; 
      private final Node childGraphic = new Rectangle(16, 16, Color.CORNFLOWERBLUE) ; 
      @Override 
      protected void updateItem(String item, boolean empty) { 
       super.updateItem(item, empty); 
       setGraphic(empty ? null : getTreeItem() == root ? rootGraphic : childGraphic); 
       setText(empty ? null : item); 
      } 
     }); 
     primaryStage.setScene(new Scene(tree)); 
     primaryStage.show(); 
    } 

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

Screenshot (entweder):

enter image description here