TreeView FocusModel focusing wrong index

XMLWordPrintable

    • Type: Bug
    • Resolution: Duplicate
    • Priority: P4
    • None
    • Affects Version/s: 8u20
    • Component/s: javafx
    • Environment:

      Windows 7 - 64 Bit.

      Selecting the first entry and pressing the button raises the issue that the focus moves downwards while the selection is still correct.

      public class GuiTestMainFocus extends Application {

          @Override
          public void start(Stage primaryStage) {
              Button btn = new Button();

              final TreeItem<String> treeItem = new TreeItem("Items");
              List<String> stringList = new ArrayList<String>();
              for (Integer i = 0; i < 10; i++) {
                  stringList.add("Test " + i);
              }

              TreeView<String> treeView = new TreeView(treeItem);

              btn.setText("Set new list and select oldIdx!");
              btn.setOnAction(new EventHandler<ActionEvent>() {
                  @Override
                  public void handle(ActionEvent event) {
                      List<String> stringList = new ArrayList<String>();
                      for (Integer i = 0; i < 10; i++) {
                          stringList.add("Changed " + i);
                      }

                      Integer oldIdx = treeView.getSelectionModel().getSelectedIndex();

                      List<TreeItem<String>> treeItems = new ArrayList<>();
                      stringList.forEach( p -> treeItems.add(new TreeItem(p)));

                      treeView.getRoot().getChildren().setAll(treeItems);
                      treeView.getSelectionModel().select(oldIdx);
                      treeView.requestFocus();
                  }
              });

              stringList.forEach(string -> treeItem.getChildren().add(new TreeItem(string)));
              HBox root = new HBox();
              treeView.setShowRoot(false);
              root.getChildren().addAll(treeView, btn);

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

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

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

            Assignee:
            Karthik P K
            Reporter:
            J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: