From 3576988e8c0e3d3a586c0aad4c1a71ac25cfb394 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 17 Sep 2017 14:47:45 +0200
Subject: [PATCH] Fixed #194 - datepicker replace textfield year with spinner

---
 .../ui/controller/DatePickerController.java   | 30 +++++++------------
 .../ui/controller/NewPaymentController.java   |  4 +--
 .../budgetmaster/ui/fxml/DatePickerGUI.fxml   |  8 ++---
 3 files changed, 15 insertions(+), 27 deletions(-)

diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/DatePickerController.java b/src/de/deadlocker8/budgetmaster/ui/controller/DatePickerController.java
index ea27d833d..0e4b32324 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/DatePickerController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/DatePickerController.java
@@ -12,8 +12,8 @@ import javafx.fxml.FXML;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
 import javafx.scene.control.ComboBox;
-import javafx.scene.control.TextField;
-import javafx.scene.control.TextFormatter;
+import javafx.scene.control.Spinner;
+import javafx.scene.control.SpinnerValueFactory;
 import javafx.scene.paint.Color;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
@@ -24,7 +24,7 @@ import tools.Localization;
 public class DatePickerController extends BaseController implements Styleable
 {
 	@FXML private ComboBox<String> comboBoxMonth;
-	@FXML private TextField textFieldYear;
+	@FXML private Spinner<Integer> spinnerYear;
 	@FXML private Button buttonCancel;
 	@FXML private Button buttonConfirm;
 	
@@ -54,23 +54,15 @@ public class DatePickerController extends BaseController implements Styleable
 	@Override
 	public void init()
 	{
-		textFieldYear.setTextFormatter(new TextFormatter<>(c -> {
-			if(c.getControlNewText().isEmpty())
+		SpinnerValueFactory<Integer> spinnerYearValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 3000, currentDate.getYear()); 
+		spinnerYear.setValueFactory(spinnerYearValueFactory);
+		spinnerYear.setEditable(false);
+		spinnerYear.focusedProperty().addListener((observable, oldValue, newValue) -> {
+			if(!newValue)
 			{
-				return c;
+				spinnerYear.increment(0); // won't change value, but will commit editor
 			}
-
-			if(c.getControlNewText().matches("[0-9]*"))
-			{
-				return c;
-			}
-			else
-			{
-				return null;
-			}
-		}));
-		
-		textFieldYear.setText(String.valueOf(currentDate.getYear()));
+		});
 		
 		comboBoxMonth.getItems().addAll(Helpers.getMonthList());
 		comboBoxMonth.setValue(Helpers.getMonthList().get(currentDate.getMonthOfYear()-1));
@@ -80,7 +72,7 @@ public class DatePickerController extends BaseController implements Styleable
 
 	public void confirm()
 	{
-		String year = textFieldYear.getText();
+		String year = String.valueOf(spinnerYear.getValue());
 		if(year == null || year.equals(""))
 		{
 			AlertGenerator.showAlert(AlertType.WARNING,
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
index e74ac7d96..c98510f45 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
@@ -250,13 +250,13 @@ public class NewPaymentController extends BaseController implements Styleable
 	{
 		SpinnerValueFactory<Integer> valueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 1000, 0);
 		spinnerRepeatingPeriod.setValueFactory(valueFactory);
-		spinnerRepeatingPeriod.setEditable(true);
+		spinnerRepeatingPeriod.setEditable(false);
 		spinnerRepeatingPeriod.focusedProperty().addListener((observable, oldValue, newValue) -> {
 			if(!newValue)
 			{
 				spinnerRepeatingPeriod.increment(0); // won't change value, but will commit editor
 			}
-		});		
+		});
 	}
 	
 	private void initComboBoxRepeatingDay()	
diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/DatePickerGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/DatePickerGUI.fxml
index 7c72d479c..76cfb1fd9 100644
--- a/src/de/deadlocker8/budgetmaster/ui/fxml/DatePickerGUI.fxml
+++ b/src/de/deadlocker8/budgetmaster/ui/fxml/DatePickerGUI.fxml
@@ -4,7 +4,7 @@
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.control.ComboBox?>
 <?import javafx.scene.control.Label?>
-<?import javafx.scene.control.TextField?>
+<?import javafx.scene.control.Spinner?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
@@ -33,11 +33,7 @@
                               <Font name="System Bold" size="14.0" />
                            </font>
                         </Label>
-                        <TextField fx:id="textFieldYear" maxWidth="1.7976931348623157E308" prefHeight="29.0">
-                           <font>
-                              <Font size="13.0" />
-                           </font>
-                        </TextField>
+                        <Spinner fx:id="spinnerYear" editable="true" maxWidth="1.7976931348623157E308" minHeight="29.0" minWidth="163.0" prefHeight="29.0" prefWidth="163.0" />
                      </children>
                   </VBox>
                </children>
-- 
GitLab