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

Click behavior in TreeTableView changes, when treeColumn is not the first column

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 8u60
    • 8u25
    • javafx
    • Windows 7, JDK (1.8.0_25-b18)

      When changing the treeColumn via setTreeColumn( column ) to other column then the first, the click behavior is not consistent anymore as discribed in the user experience documentation:

      "Nodes can be opened by clicking on the "turner" icons or by double clicking the node name (note that if editing is enabled, double click will enter the edit mode)."

      The turner icon does not react anymore unless the column gets double clicked and moreover sometimes the selection does not change, when clicking on the label (instead the item gets collapsed/expanded).

      I created a small example demonstrating the problem with the turner icon. The selection issue barely occurs. Not sure about the circumstances there.


      import javafx.application.Application;
      import javafx.beans.property.SimpleStringProperty;
      import javafx.beans.property.StringProperty;
      import javafx.scene.Scene;
      import javafx.scene.control.TreeItem;
      import javafx.scene.control.TreeTableColumn;
      import javafx.scene.control.TreeTableView;
      import javafx.scene.control.cell.TreeItemPropertyValueFactory;
      import javafx.scene.layout.BorderPane;
      import javafx.stage.Stage;


      /**
       * TreeTableView Turner Issue Example demonstrating, that the Turner does not work anymore correctly, when
       * the treeColumn is changed to another column then the first one.
       *
       * @author ymene
       */
      public class TreeTableViewTurnerIssueExample extends Application
      {
        @Override
        public void start( final Stage primaryStage )
        {
          TreeItem<Item> root = new TreeItem<>( new Item( "Root", "Root" ) );

          TreeItem<Item> item1 = new TreeItem<>( new Item( "1", "Item1" ) );
          TreeItem<Item> item2 = new TreeItem<>( new Item( "2", "Item2" ) );
          TreeItem<Item> item3 = new TreeItem<>( new Item( "3", "Item3" ) );
          TreeItem<Item> item4 = new TreeItem<>( new Item( "4", "Item4" ) );
          TreeItem<Item> item41 = new TreeItem<>( new Item( "4.1", "Item41" ) );
          TreeItem<Item> item42 = new TreeItem<>( new Item( "4.2", "Item42" ) );
          TreeItem<Item> item43 = new TreeItem<>( new Item( "4.3", "Item43" ) );
          TreeItem<Item> item5 = new TreeItem<>( new Item( "5", "Item5" ) );
          TreeItem<Item> item52 = new TreeItem<>( new Item( "5.1", "Item51" ) );

          root.getChildren().add( item1 );
          item1.getChildren().add( item2 );
          root.getChildren().add( item3 );
          item3.getChildren().add( item4 );
          item4.getChildren().add( item41 );
          item4.getChildren().add( item42 );
          item4.getChildren().add( item43 );
          root.getChildren().add( item5 );
          item5.getChildren().add( item52 );

          TreeTableColumn<Item, String> nameColumn = new TreeTableColumn<>( "Name" );
          TreeTableColumn<Item, String> valueColumn = new TreeTableColumn<>( "Value" );

          nameColumn.setCellValueFactory( new TreeItemPropertyValueFactory<Item, String>( "name" ) );
          valueColumn.setCellValueFactory( new TreeItemPropertyValueFactory<Item, String>( "value" ) );

          final TreeTableView<Item> treeTableView = new TreeTableView<>( root );
          treeTableView.getColumns().add( nameColumn );
          treeTableView.getColumns().add( valueColumn );

          treeTableView.setTreeColumn( valueColumn );//<- changing this to the first column, the clickbehavior is fine again.

          treeTableView.setShowRoot( false );
          treeTableView.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY );

          BorderPane layout = new BorderPane();
          layout.setCenter( treeTableView );
          Scene scene = new Scene( layout, 400, 400 );
      // scene.getStylesheets().add( getClass().getResource( "application.css" ).toExternalForm() );
          primaryStage.setScene( scene );
          primaryStage.show();
        }

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

        public static class Item
        {
          private final StringProperty name = new SimpleStringProperty();
          private final StringProperty value = new SimpleStringProperty();

          public Item( final String name, final String value )
          {
            this.name.set( name );
            this.value.set( value );
          }

          public String getName()
          {
            return name.get();
          }

          public void setName( final String name )
          {
            this.name.set( name );
          }

          public StringProperty nameProperty()
          {
            return name;
          }

          public String getValue()
          {
            return value.get();
          }

          public void setValue( final String value )
          {
            this.value.set( value );
          }

          public StringProperty valueProperty()
          {
            return value;
          }
        }
      }

            jgiles Jonathan Giles
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: