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

TableView with Checkbox selected item

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • 7u7
    • javafx
    • I have use Linux machine
      JDK 7u7 + JavaFX 2.2.1

      In my Project I have created an Table View,In that Table view inside of cell with check Box .If i use multiple selected item with the following code:
      "table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);"
      so after selecting manually, Table View item shows the color in BLUE.
      But If i suppose to select the item using Check Box,with the following code
      "table.getSelectionModel().select(getTableRow().getIndex());"
      Table View not shows in Blue Color.

      MyCode is :

      package tableviewwithaddcheckbox;

      import com.sun.javafx.runtime.VersionInfo;
      import javafx.application.Application;
      import static javafx.application.Application.launch;
      import javafx.beans.property.SimpleBooleanProperty;
      import javafx.beans.value.ChangeListener;
      import javafx.beans.value.ObservableValue;
      import javafx.collections.FXCollections;
      import javafx.collections.ListChangeListener;
      import javafx.geometry.Insets;
      import javafx.scene.Scene;
      import javafx.scene.control.CheckBox;
      import javafx.scene.control.ContentDisplay;
      import javafx.scene.control.SelectionMode;
      import javafx.scene.control.TableCell;
      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 reegan
       */
      public class TableViewWithAddCheckBox extends Application {

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

          @Override
          public void start(final Stage stage) {
              stage.setTitle("People");


              // create a table.
              final TableView<Person> table = new TableView<>(
                      FXCollections.observableArrayList(
                      new Person("Jacob", "Smith"),
                      new Person("Isabella", "Johnson"),
                      new Person("Ethan", "Williams"),
                      new Person("Emma", "Jones"),
                      new Person("Michael", "Brown")));

                  table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

              // define the table columns.
              TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
              firstNameCol.setCellValueFactory(new PropertyValueFactory("firstName"));
              TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");
              lastNameCol.setCellValueFactory(new PropertyValueFactory("lastName"));
              TableColumn<Person, Boolean> actionCol = new TableColumn<>("Action");
              actionCol.setSortable(false);

              // define a simple boolean cell value for the action column so that the column will only be shown for non-empty rows.
              actionCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Boolean>, ObservableValue<Boolean>>() {
                  @Override
                  public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Person, Boolean> features) {
                      return new SimpleBooleanProperty(features.getValue() != null);
                  }
              });

              // create a cell value factory with an add button for each row in the table.
              actionCol.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Person, Boolean>>() {
                  @Override
                  public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> personBooleanTableColumn) {
                      return new AddPersonCell(stage, table);
                  }
              });
              
              table.getColumns().setAll(firstNameCol, lastNameCol, actionCol);
              table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
              
              table.getSelectionModel().getSelectedIndices().addListener(new ListChangeListener() {
                      @Override
                      public void onChanged(ListChangeListener.Change change) {
                          System.out.println(change.getList());
                      }
                  });
                 table.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Person>() {

                 @Override
                 public void onChanged(ListChangeListener.Change<? extends Person> change) {
                     System.out.println(change.getList());
                     VersionInfo info = new VersionInfo();
                     System.out.println(info.getRuntimeVersion());
                     
                 }
             });
              System.out.println(table.getItems());
              stage.setScene(new Scene(table));
              stage.show();
          }

          private class AddPersonCell extends TableCell<Person, Boolean> {

              final CheckBox addButton = new CheckBox();
              final StackPane paddedButton = new StackPane();

              AddPersonCell(final Stage stage, final TableView table) {
                  paddedButton.setPadding(new Insets(3));
                  paddedButton.getChildren().add(addButton);

                  addButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
                      @Override
                      public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                          if (t1) {
                              table.getSelectionModel().select(getTableRow().getIndex());
                              
                              System.out.println(getTableColumn());
                          } else {
                              table.getSelectionModel().clearSelection(getTableRow().getIndex());
                          }
                      }
                  });
                  



              }

              @Override
              protected void updateItem(Boolean item, boolean empty) {
                  super.updateItem(item, empty);
                  if (!empty) {
                      setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                      setGraphic(paddedButton);
                  }
              }
          }
      }


            Unassigned Unassigned
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Imported: