3232import de .doubleslash .keeptime .model .Project ;
3333import de .doubleslash .keeptime .model .Work ;
3434import javafx .application .Platform ;
35+ import javafx .beans .binding .Bindings ;
36+ import javafx .beans .binding .BooleanBinding ;
37+ import javafx .beans .binding .BooleanExpression ;
38+ import javafx .beans .property .BooleanProperty ;
39+ import javafx .beans .property .SimpleBooleanProperty ;
3540import javafx .beans .property .StringProperty ;
3641import javafx .beans .value .ChangeListener ;
3742import javafx .beans .value .ObservableValue ;
@@ -86,7 +91,7 @@ public class ManageWorkController {
8691
8792 private boolean comboChange ;
8893 private Project selectedProject ;
89- private boolean valid ;
94+ private BooleanProperty isValidProperty = new SimpleBooleanProperty () ;
9095
9196 private FilteredList <Project > filteredList ;
9297
@@ -111,32 +116,33 @@ private void initialize() {
111116 }
112117
113118 private void setUpTimeRestriction () {
114- final ChangeListener < Object > timeListener = ( final ObservableValue <? extends Object > observable ,
115- final Object oldValue , final Object newValue ) -> {
119+
120+ BooleanBinding isValidBinding = Bindings . createBooleanBinding (( ) -> {
116121 if (startTimeSpinner .getValue () == null || endTimeSpinner .getValue () == null
117122 || startDatePicker .getValue () == null || endDatePicker .getValue () == null ) {
118- return ;
123+ return false ;
119124 }
125+
120126 if (startDatePicker .getValue ().isAfter (endDatePicker .getValue ())
121127 || (startDatePicker .getValue ().isEqual (endDatePicker .getValue ())
122128 && startTimeSpinner .getValue ().isAfter (endTimeSpinner .getValue ()))) {
123- errorLabel .setText ("startDate has to be before endDate" );
124- valid = false ;
129+ return false ;
125130 } else {
126- errorLabel .setText ("" );
127- valid = true ;
131+ return true ;
128132 }
133+ }, startTimeSpinner .valueProperty (), endTimeSpinner .valueProperty (), endDatePicker .valueProperty (),
134+ startDatePicker .valueProperty ());
129135
130- };
131- startTimeSpinner .valueProperty ().addListener (timeListener );
132- endTimeSpinner .valueProperty ().addListener (timeListener );
133- endDatePicker .valueProperty ().addListener (timeListener );
134- startDatePicker .valueProperty ().addListener (timeListener );
136+ this .isValidProperty .bind (isValidBinding );
135137
136- }
138+ errorLabel .textProperty ().bind (Bindings .createStringBinding (() -> {
139+ if (isValidProperty .getValue ()) {
140+ return "" ;
141+ } else {
142+ return "startDate has to be before endDate" ;
143+ }
137144
138- public boolean isValid () {
139- return valid ;
145+ }, isValidProperty ));
140146 }
141147
142148 private void setUpTimeSpinner (final Spinner <LocalTime > spinner ) {
@@ -317,9 +323,6 @@ public void initializeWith(final Work work) {
317323
318324 startTimeSpinner .getValueFactory ().setValue (work .getStartTime ().toLocalTime ());
319325 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 ()));
323326
324327 noteTextArea .setText (work .getNotes ());
325328
@@ -329,7 +332,6 @@ public void initializeWith(final Work work) {
329332 setColor (projectComboBox .getEditor (), model .hoverBackgroundColor .get ());
330333
331334 setTextColor (projectComboBox .getEditor (), model .hoverFontColor .get ());
332-
333335 }
334336
335337 private void enableStrgA_combo () {
@@ -366,4 +368,8 @@ private void setTextColor(final Node object, final Color color) {
366368 object .setStyle (style );
367369 }
368370
371+ public BooleanProperty validProperty () {
372+ return this .isValidProperty ;
373+ }
374+
369375}
0 commit comments