summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/fbin/java2fx/tables/DatePickerTableCell.java
blob: c68edbb39abc253eba7cc634a971293236c5a7be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package de.fhswf.fbin.java2fx.tables;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TableCell;

public class DatePickerTableCell<S> extends TableCell<S, LocalDate>
{
   private DatePicker datePicker;

   @Override
   public void startEdit()
   {
      if (!isEmpty())
      {
         super.startEdit();
         createDatePicker();
         setText(null);
         setGraphic(datePicker);
      }
   }

   @Override
   public void cancelEdit()
   {
      super.cancelEdit();

      setText(getItem().format(DateTimeFormatter.RFC_1123_DATE_TIME));
      setGraphic(null);
   }

   @Override
   public void updateItem(LocalDate item, boolean empty)
   {
      super.updateItem(item, empty);

      if (empty)
      {
         setText(null);
         setGraphic(null);
      }
      else
      {
         if (isEditing())
         {
            if (datePicker != null)
            {
               datePicker.setValue(item);
            }
            setText(null);
            setGraphic(datePicker);
         }
         else
         {
            setText(item.format(DateTimeFormatter.RFC_1123_DATE_TIME));
            setGraphic(null);
         }
      }
   }

   private void createDatePicker()
   {
      datePicker = new DatePicker();
      datePicker.setValue(getItem());
      datePicker.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
      datePicker.focusedProperty().addListener(new ChangeListener<Boolean>()
      {
         @Override
         public void changed(ObservableValue<? extends Boolean> arg0,
               Boolean oldVAlue, Boolean newValue)
         {
            if (!newValue)
            {
               commitEdit(datePicker.getValue());
            }
         }
      });
   }

   private String getString()
   {
      return getItem() == null ? "" : getItem().format(DateTimeFormatter.RFC_1123_DATE_TIME);
   }
}