package objects; import java.util.function.Function; import javafx.event.ActionEvent; import javafx.scene.control.Button; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.util.Callback; public class ActionButtonTableCell extends TableCell { private final Button actionButton; public ActionButtonTableCell(String label, Function< S, S> function) { this.getStyleClass().add("action-button-table-cell"); this.actionButton = new Button(label); this.actionButton.setOnAction((ActionEvent e) -> { function.apply(getCurrentItem()); }); this.actionButton.setMaxWidth(Double.MAX_VALUE); } public S getCurrentItem() { return getTableView().getItems().get(getIndex()); } public static Callback, TableCell> forTableColumn(String label, Function< S, S> function) { return param -> new ActionButtonTableCell<>(label, function); } @Override public void updateItem(Button item, boolean empty) { super.updateItem(item, empty); if (empty) { setGraphic(null); } else { setGraphic(actionButton); } } }