Class TableRowExpanderColumn<S>

java.lang.Object
javafx.scene.control.TableColumnBase<S,T>
javafx.scene.control.TableColumn<S,Boolean>
org.controlsfx.control.table.TableRowExpanderColumn<S>
Type Parameters:
S - The item type of the TableView
All Implemented Interfaces:
Styleable, EventTarget

public final class TableRowExpanderColumn<S> extends TableColumn<S,Boolean>
The TableRowExpanderColumn enables a TableView to provide an expandable editor below each table row. The column itself contains a toggle button that on click will show an editor for the current row right below the columns. Example:
 TableRowExpanderColumn<Customer> expander = new TableRowExpanderColumn<>(param -> {
     HBox editor = new HBox(10);
     TextField text = new TextField(param.getValue().getName());
     Button save = new Button("Save customer");
     save.setOnAction(event -> {
         save();
         param.toggleExpanded();
     });
     editor.getChildren().addAll(text, save);
     return editor;
 });

 tableView.getColumns().add(expander);
 
You can provide a custom cellFactory to customize the toggle button. A typical custom toggle cell implementation would look like this:
 public class MyCustomToggleCell<S> extends TableCell<S, Boolean> {
     private Button button = new Button();

     public MyCustomToggleCell(TableRowExpanderColumn<S> column) {
         button.setOnAction(event -> column.toggleExpanded(getIndex()));
     }

     protected void updateItem(Boolean expanded, boolean empty) {
         super.updateItem(expanded, empty);
         if (expanded == null || empty) {
             setGraphic(null);
         } else {
             button.setText(expanded ? "Collapse" : "Expand");
             setGraphic(button);
         }
     }
 }
 
The custom toggle cell utilizes the toggleExpanded(int) method to toggle the row expander instead of param.toggleExpanded() like the editor does.
  • Constructor Details

    • TableRowExpanderColumn

      public TableRowExpanderColumn(Callback<TableRowExpanderColumn.TableRowDataFeatures<S>,Node> expandedNodeCallback)
      Create a row expander column that can be added to the TableView list of columns. The expandedNodeCallback is expected to return a Node representing the editor that should appear below the table row when the toggle button within the expander column is clicked. Once this column is assigned to a TableView, it will automatically install a custom row factory for the TableView so that it can configure a TableRow with the ExpandableTableRowSkin. It is within the skin that the actual rendering of the expanded node occurs.
      Parameters:
      expandedNodeCallback -
      See Also:
  • Method Details

    • getExpandedProperty

      public BooleanProperty getExpandedProperty(S item)
      Returns a Boolean property that can be used to manipulate the expanded state for a row corresponding to the given item value.
      Parameters:
      item - The item corresponding to a table row
      Returns:
      The boolean property
    • getOrCreateExpandedNode

      public Node getOrCreateExpandedNode(TableRow<S> tableRow)
      Get or create and cache the expanded node for a given item.
      Parameters:
      tableRow - The table row, used to find the item index
      Returns:
      The expanded node for the given item
    • getExpandedNode

      public Node getExpandedNode(S item)
      Return the expanded node for the given item, if it exists.
      Parameters:
      item - The item corresponding to a table row
      Returns:
      The expanded node, if it exists.
    • toggleExpanded

      public void toggleExpanded(int index)
      Toggle the expanded state of the row at the given index.
      Parameters:
      index - The index of the row you want to toggle expansion for.