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

[TreeTableView] TreeTableView#getRow() doesn't return -1 for invisible rows

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • 8
    • 8
    • javafx

      To reproduce:
      Push "Show row indexes" button.
      Initial root state is "collapsed", so other items are invisible.
      But get row doesn't return -1 for them.


      import com.sun.javafx.runtime.VersionInfo;
      import javafx.application.Application;
      import javafx.beans.property.SimpleIntegerProperty;
      import javafx.beans.property.SimpleStringProperty;
      import javafx.beans.value.ObservableValue;
      import javafx.event.ActionEvent;
      import javafx.event.EventHandler;
      import javafx.scene.Scene;
      import javafx.scene.control.Button;
      import javafx.scene.control.TreeItem;
      import javafx.scene.control.TreeTableColumn;
      import javafx.scene.control.TreeTableColumn.CellDataFeatures;
      import javafx.scene.control.TreeTableView;
      import javafx.scene.layout.HBox;
      import javafx.stage.Stage;
      import javafx.util.Callback;

      public class JavaFXApplication6 extends Application {

          TreeTableView<Person> treeTableView;

          @Override
          public void start(Stage primaryStage) {

              initTreeTableView();

              HBox root = new HBox(10.0);
              root.getChildren().add(treeTableView);

              Button btnRowInd = new Button("Show row indexes");
              btnRowInd.setOnAction(new EventHandler<ActionEvent>() {
                  @Override
                  public void handle(ActionEvent t) {
                      TreeItem<Person> r = treeTableView.getRoot();
                      int row = treeTableView.getRow(r);
                      System.out.println(r.getValue().firstName + "; row = " + row);
                     showTreeItemRowIndex(r);
                  }
                  
                  private void showTreeItemRowIndex(TreeItem<Person> r) {
                      for (TreeItem<Person> item : r.getChildren()) {
                           int row = treeTableView.getRow(item);
                          System.out.println(item.getValue().firstName + "; row = " + row);
                          showTreeItemRowIndex(item);
                      }
                  }
              });

              root.getChildren().add(btnRowInd);

              Scene scene = new Scene(root, 400, 300);

              primaryStage.setTitle(VersionInfo.getRuntimeVersion());
              primaryStage.setScene(scene);
              primaryStage.show();
          }

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

          private void initTreeTableView() {
              treeTableView = new TreeTableView<>();
              treeTableView.setMinSize(200, 150);
              treeTableView.setPrefSize(250, 200);
              treeTableView.setMaxSize(300, 250);
              treeTableView.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);

              TreeItem<Person> root = new TreeItem<>(new Person("John Smith", 32));
              treeTableView.setRoot(root);
              treeTableView.showRootProperty().set(true);

              final TreeTableColumn<Person, String> firstNameCol = new TreeTableColumn<>("First name");
              firstNameCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
                  @Override
                  public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Person, String> p) {
                      return p.getValue().getValue().firstName;
                  }
              });

              TreeTableColumn<Person, Number> ageCol = new TreeTableColumn<>("Age");
              ageCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Number>, ObservableValue<Number>>() {
                  @Override
                  public ObservableValue<Number> call(CellDataFeatures<Person, Number> p) {
                      return p.getValue().getValue().age;
                  }
              });
              treeTableView.getColumns().addAll(firstNameCol, ageCol);

              Person p = new Person("Angela Davis", 33);
              treeTableView.getRoot().getChildren().add(new TreeItem<>(p));

              p = new Person("John Malkovich", 100);
              treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
              
              for (int i = 0; i < 19; i++) {
                  p = new Person("Item - " + i, 100);
                  treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
              }
          }
      }

      class Person {

          public final SimpleStringProperty firstName;
          public final SimpleIntegerProperty age;

          public Person(String name, int age) {
              this.firstName = new SimpleStringProperty(name);
              this.age = new SimpleIntegerProperty(age);
          }
      }

            jgiles Jonathan Giles
            dzinkevi Dmitry Zinkevich (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: