4040import javafx .scene .Node ;
4141import javafx .scene .control .ComboBox ;
4242import javafx .scene .control .DatePicker ;
43+ import javafx .scene .control .Label ;
4344import javafx .scene .control .ListCell ;
4445import javafx .scene .control .ListView ;
4546import javafx .scene .control .Spinner ;
@@ -80,8 +81,12 @@ public class ManageWorkController {
8081 @ FXML
8182 private ComboBox <Project > projectComboBox ;
8283
84+ @ FXML
85+ private Label errorLabel ;
86+
8387 private boolean comboChange ;
8488 private Project selectedProject ;
89+ private boolean valid ;
8590
8691 private FilteredList <Project > filteredList ;
8792
@@ -98,11 +103,42 @@ private void initialize() {
98103
99104 setUpTimeSpinner (endTimeSpinner );
100105
106+ setUpTimeRestriction ();
107+
101108 setProjectUpComboBox ();
102109
103110 Platform .runLater (() -> projectComboBox .requestFocus ());
104111 }
105112
113+ private void setUpTimeRestriction () {
114+ final ChangeListener <Object > timeListener = (final ObservableValue <? extends Object > observable ,
115+ final Object oldValue , final Object newValue ) -> {
116+ if (startTimeSpinner .getValue () == null || endTimeSpinner .getValue () == null
117+ || startDatePicker .getValue () == null || endDatePicker .getValue () == null ) {
118+ return ;
119+ }
120+ if (startDatePicker .getValue ().isAfter (endDatePicker .getValue ())
121+ || (startDatePicker .getValue ().isEqual (endDatePicker .getValue ())
122+ && startTimeSpinner .getValue ().isAfter (endTimeSpinner .getValue ()))) {
123+ errorLabel .setText ("startDate has to be before endDate" );
124+ valid = false ;
125+ } else {
126+ errorLabel .setText ("" );
127+ valid = true ;
128+ }
129+
130+ };
131+ startTimeSpinner .valueProperty ().addListener (timeListener );
132+ endTimeSpinner .valueProperty ().addListener (timeListener );
133+ endDatePicker .valueProperty ().addListener (timeListener );
134+ startDatePicker .valueProperty ().addListener (timeListener );
135+
136+ }
137+
138+ public boolean isValid () {
139+ return valid ;
140+ }
141+
106142 private void setUpTimeSpinner (final Spinner <LocalTime > spinner ) {
107143 spinner .focusedProperty ().addListener ((e ) -> {
108144 final LocalTimeStringConverter stringConverter = new LocalTimeStringConverter (FormatStyle .MEDIUM );
@@ -281,6 +317,9 @@ public void initializeWith(final Work work) {
281317
282318 startTimeSpinner .getValueFactory ().setValue (work .getStartTime ().toLocalTime ());
283319 endTimeSpinner .getValueFactory ().setValue (work .getEndTime ().toLocalTime ());
320+ valid = !startDatePicker .getValue ().isAfter (endDatePicker .getValue ())
321+ || (startDatePicker .getValue ().isEqual (endDatePicker .getValue ())
322+ && startTimeSpinner .getValue ().isAfter (endTimeSpinner .getValue ()));
284323
285324 noteTextArea .setText (work .getNotes ());
286325
@@ -290,6 +329,7 @@ public void initializeWith(final Work work) {
290329 setColor (projectComboBox .getEditor (), model .hoverBackgroundColor .get ());
291330
292331 setTextColor (projectComboBox .getEditor (), model .hoverFontColor .get ());
332+
293333 }
294334
295335 private void enableStrgA_combo () {
0 commit comments