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

[TableView] Table content does not sort again after changing the data set

    Details

      Description

      1. Fill a table with random sortable data
      2. Click a header of the table/column to sort them
      3. Fill the table again using the setItems() method
      4. The header keeps displaying an arrow indicating the way the data are supposed to be ordered but they aren't.

      Code to reproduce the issue:

      import javafx.application.Application;
      import javafx.beans.property.SimpleStringProperty;
      import javafx.beans.value.ObservableValue;
      import javafx.collections.FXCollections;
      import javafx.event.ActionEvent;
      import javafx.event.EventHandler;
      import javafx.geometry.Insets;
      import javafx.scene.Scene;
      import javafx.scene.control.Button;
      import javafx.scene.control.TableColumn;
      import javafx.scene.control.TableView;
      import javafx.scene.control.TableColumn.CellDataFeatures;
      import javafx.scene.layout.VBox;
      import javafx.stage.Stage;
      import javafx.util.Callback;

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

      @Override
      public void start(Stage primaryStage) throws Exception
      {
      final TableColumn<String, String> column = new TableColumn<String, String>("Click to sort");
      column.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<String,String>, ObservableValue<String>>()
      {
      @Override
      public ObservableValue<String> call(CellDataFeatures<String, String> param)
      {
      return new SimpleStringProperty(param.getValue());
      }
      });

      final TableView<String> table = new TableView<String>();
      table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
      table.getColumns().add(column);

      final Button button = new Button("Fill table");

      final VBox vbox = new VBox(10.0, table, button);
      vbox.setPadding(new Insets(10.0));

      primaryStage.setScene(new Scene(vbox));
      primaryStage.show();

      button.onActionProperty().set(new EventHandler<ActionEvent>()
      {
      @Override
      public void handle(ActionEvent event)
      {
      table.setItems(FXCollections.observableArrayList("s", "o", "r", "t", "m", "e"));
      }
      });
      }
      }

        Attachments

          Activity

            People

            • Assignee:
              jgiles Jonathan Giles
              Reporter:
              jsmucrjfx Jan Smucr (Inactive)
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Imported: