Advertisement
Guest User

JavaFX TableCell Factory

a guest
Oct 22nd, 2012
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.77 KB | None | 0 0
  1. package ch.crisi.timetracker.table.view;
  2.  
  3. import ch.crisi.timetracker.table.data.TaskWrapper;
  4. import javafx.application.Platform;
  5. import javafx.beans.value.ChangeListener;
  6. import javafx.beans.value.ObservableValue;
  7. import javafx.event.EventHandler;
  8. import javafx.scene.control.TableCell;
  9. import javafx.scene.control.TextField;
  10. import javafx.scene.input.InputMethodRequests;
  11. import javafx.scene.input.KeyCode;
  12. import javafx.scene.input.KeyEvent;
  13. import javafx.scene.text.TextAlignment;
  14.  
  15. public class TaskNameTableCell extends TableCell<TaskWrapper, String> {
  16.  
  17.     public TaskNameTableCell() {
  18.         setTextAlignment(TextAlignment.RIGHT);
  19.     }
  20.  
  21.  
  22.     private TextField textField;
  23.  
  24.     @Override
  25.     public void startEdit() {
  26.         if (!isEmpty()) {
  27.             super.startEdit();
  28.  
  29.             createTextField();
  30.             setText(null);
  31.             setGraphic(textField);
  32.             Platform.runLater(new Runnable() {
  33.                 @Override
  34.                 public void run() {
  35.                     textField.requestFocus();
  36.                     textField.end();
  37.                 }
  38.             });
  39.         }
  40.     }
  41.  
  42.     @Override
  43.     public void cancelEdit() {
  44.         super.cancelEdit();
  45.  
  46.         setText((String) getItem());
  47.         setGraphic(null);
  48.     }
  49.  
  50.     @Override
  51.     public void updateItem(String item, boolean empty) {
  52.         super.updateItem(item, empty);
  53.  
  54.         if (empty) {
  55.             setText(null);
  56.             setGraphic(null);
  57.         } else {
  58.             if (isEditing()) {
  59.                 if (textField != null) {
  60.                     textField.setText(getString());
  61.  
  62.                 }
  63.                 setText(null);
  64.                 setGraphic(textField);
  65.             } else {
  66.                 setText(getString());
  67.                 setGraphic(null);
  68.             }
  69.         }
  70.     }
  71.  
  72.     private void createTextField() {
  73.         textField = new TextField(getString());
  74.         textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
  75.         textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
  76.             @Override
  77.             public void changed(ObservableValue<? extends Boolean> arg0,
  78.                                 Boolean arg1, Boolean arg2) {
  79.                 if (!arg2) {
  80.                     commitEdit(textField.getText());
  81.                 }
  82.             }
  83.         });
  84.         textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
  85.             @Override
  86.             public void handle(KeyEvent keyEvent) {
  87.                 if (keyEvent.getCode() == KeyCode.ENTER) {
  88.                     commitEdit(textField.getText());
  89.                 }
  90.             }
  91.         });
  92.     }
  93.  
  94.     private String getString() {
  95.         return getItem() == null ? "" : getItem().toString();
  96.     }
  97.  
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement