Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8123421

TreeView nodes with custom graphic are cut-off

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • P4
    • Resolution: Fixed
    • 8
    • 8
    • javafx
    • Mac OS X 10.8.3 jdk 8b91

    Description

      Run the enclosed program and then expand either the A or B node. The children appear without the proper height to display the two labels. Clicking on any node in the tree then fixes the nodes and they display correctly. Expanding or collapsing any node in the tree makes the problem re-appear.

      import javafx.application.Application;
      import javafx.geometry.Pos;
      import javafx.scene.Scene;
      import javafx.scene.control.Label;
      import javafx.scene.control.TreeCell;
      import javafx.scene.control.TreeItem;
      import javafx.scene.control.TreeView;
      import javafx.scene.layout.BorderPane;
      import javafx.scene.layout.VBox;
      import javafx.stage.Stage;

      public class TreeWrapBug extends Application {
      public static void main(String[] args) {
      Application.launch(args);
      }

      public void start(Stage stage) throws Exception {
      TreeItem<String> root = new TreeItem<>("ROOT");
      TreeItem<String> a = new TreeItem<>("A");
      root.getChildren().add(a);
      TreeItem<String> b = new TreeItem<>("B");
      root.getChildren().add(b);
      a.getChildren().add(new TreeItem<>("A.1"));
      a.getChildren().add(new TreeItem<>("A.2"));
      a.getChildren().add(new TreeItem<>("A.3"));
      b.getChildren().add(new TreeItem<>("B.1"));
      b.getChildren().add(new TreeItem<>("B.2"));
      b.getChildren().add(new TreeItem<>("B.3"));

      TreeView<String> tv = new TreeView<>(root);
      tv.setCellFactory(stringTreeView -> new TestCell());
      tv.setShowRoot(false);
      BorderPane bp = new BorderPane(tv);
      Scene scene = new Scene(bp, 800, 600);
      stage.setScene(scene);
      stage.show();
      }

      private static class TestCell extends TreeCell<String> {
      protected void updateItem(String s, boolean empty) {
      super.updateItem(s, empty);
      if (s == null || empty) {
      setText(null);
      setGraphic(null);
      }
      else {
      Label l1 = new Label(s);
      Label l2 = new Label("Another "+s);
      VBox v = new VBox(5, l1, l2);
      v.setAlignment(Pos.BASELINE_LEFT);
      setGraphic(v);
      }
      }
      }
      }

      Attachments

        Activity

          People

            jgiles Jonathan Giles
            cstanford Curtis Stanford
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:
              Imported: