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

Bindings.select does not work for Table cell value factory

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • 7-pool
    • 7u45
    • javafx
    • Windows 7 64-bit
      Java 7u45

      Bindings.select does not work in JavaFX 2.2 but does in JavaFX 8.0.
      Run the following on each and note that Column B only shows data under JavaFX 8.0.
      There is no exception reported or any other indication of some internal failure.


      package bindingselecttest;

      import java.beans.PropertyChangeSupport;
      import javafx.application.Application;
      import javafx.beans.binding.Bindings;
      import javafx.beans.property.SimpleObjectProperty;
      import javafx.beans.value.ObservableValue;
      import javafx.scene.Scene;
      import javafx.scene.control.TableColumn;
      import javafx.scene.control.TableView;
      import javafx.scene.control.cell.PropertyValueFactory;
      import javafx.scene.layout.StackPane;
      import javafx.stage.Stage;
      import javafx.util.Callback;

      /**
       *
       * @author scott.palmer
       */
      public class BindingSelectTest extends Application {

      @Override
      public void start(Stage primaryStage) {
      TableView <ClassA> tableView = new TableView<>();
      TableColumn<ClassA, String> columnA = new TableColumn<>("Column A");
      TableColumn<ClassA, String> columnB = new TableColumn<>("Column B");
      tableView.getColumns().add(columnA);
      tableView.getColumns().add(columnB);
      columnA.setCellValueFactory(new PropertyValueFactory("propA"));
      columnB.setCellValueFactory(new BindingsSelectValueFactory(new String[]{"propB","propOfB"}));
      columnA.setPrefWidth(100);
      columnB.setPrefWidth(100);

      for (int i = 0; i < 10.; i++) {
      ClassA itemA = new ClassA();
      itemA.propA = "Row "+i+"A";
      itemA.propB = new ClassB();
      itemA.propB.propOfB = "B "+i;
      tableView.getItems().add(itemA);
      }

      StackPane root = new StackPane();
      root.getChildren().add(tableView);

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

      primaryStage.setTitle("Binding.select Test");
      primaryStage.setScene(scene);
      primaryStage.show();
      }

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

      public static class BindingsSelectValueFactory<S, T> implements Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> {
      private final SimpleObjectProperty obj = new SimpleObjectProperty();
      private final String [] path;

      public BindingsSelectValueFactory(String[] propPath) {
      path = propPath;
      }

      @Override
      public ObservableValue<T> call(TableColumn.CellDataFeatures<S, T> p) {
      obj.set(p.getValue());
      return Bindings.select(obj, path);
      }
      }

      public static class ClassA {
      private String propA;
      private ClassB propB;
      private final transient PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this);

      public String getPropA() {
      return propA;
      }

      public void setPropA(String propA) {
      java.lang.String oldPropA = this.propA;
      this.propA = propA;
      propertyChangeSupport.firePropertyChange("propA", oldPropA, propA);
      }

      public ClassB getPropB() {
      return propB;
      }

      public void setPropB(ClassB propB) {
      bindingselecttest.BindingSelectTest.ClassB oldPropB = this.propB;
      this.propB = propB;
      propertyChangeSupport.firePropertyChange("propB", oldPropB, propB);
      }

      }

      public static class ClassB {
      private String propOfB;
      private final transient PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this);

      public String getPropOfB() {
      return propOfB;
      }

      public void setPropOfB(String propOfB) {
      java.lang.String oldPropOfB = this.propOfB;
      this.propOfB = propOfB;
      propertyChangeSupport.firePropertyChange("propOfB", oldPropOfB, propOfB);
      }
      }
      }

            msladecek Martin Sládeček
            swpalmer Scott Palmer
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: