2016-10-12 11 views

答えて

0

いずれちょうどTreeItemにグラフィックを渡す:

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

またはセルファクトリーを使用する:

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); 
    } 
}); 

注大きな木のために、第二の技術が有しますこれは、それぞれセルのグラフィック(この場合は2つのノード)を作成するだけなので、はるかに効率的です。最初の手法では、アイテムのすべてのグラフィックスがツリー内に作成されます(表示されているかどうかにかかわらず)。間違いなく(私は強く主張するだろう)、第2のテクニックは懸念のよりよい分離を持っています(最初の解決策ではグラフィックはデータの一部ですが、これはまったく間違っています)。第一の技術のための

SSCCE:

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); 
    } 
} 

スクリーン(のためのいずれか):

enter image description here

第二の技術のための

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

関連する問題