ActionButtonTableCell.java 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package objects;
  2. import java.util.function.Function;
  3. import javafx.event.ActionEvent;
  4. import javafx.scene.control.Button;
  5. import javafx.scene.control.TableCell;
  6. import javafx.scene.control.TableColumn;
  7. import javafx.util.Callback;
  8. public class ActionButtonTableCell<S> extends TableCell<S, Button> {
  9. private final Button actionButton;
  10. public ActionButtonTableCell(String label, Function< S, S> function) {
  11. this.getStyleClass().add("action-button-table-cell");
  12. this.actionButton = new Button(label);
  13. this.actionButton.setOnAction((ActionEvent e) -> {
  14. function.apply(getCurrentItem());
  15. });
  16. this.actionButton.setMaxWidth(Double.MAX_VALUE);
  17. }
  18. public S getCurrentItem() {
  19. return getTableView().getItems().get(getIndex());
  20. }
  21. public static <S> Callback<TableColumn<S, Button>, TableCell<S, Button>> forTableColumn(String label, Function< S, S> function) {
  22. return param -> new ActionButtonTableCell<>(label, function);
  23. }
  24. @Override
  25. public void updateItem(Button item, boolean empty) {
  26. super.updateItem(item, empty);
  27. if (empty) {
  28. setGraphic(null);
  29. } else {
  30. setGraphic(actionButton);
  31. }
  32. }
  33. }