diff options
Diffstat (limited to 'src/jcgp/gui/settings/parameters/GUIDoubleParameter.java')
-rw-r--r-- | src/jcgp/gui/settings/parameters/GUIDoubleParameter.java | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java b/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java index 29648ca..9a6ec4a 100644 --- a/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java +++ b/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java @@ -1,12 +1,12 @@ package jcgp.gui.settings.parameters; +import java.text.DecimalFormat; + import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; -import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.control.Control; import javafx.scene.control.TextField; -import javafx.scene.input.KeyEvent; import jcgp.backend.resources.parameters.Parameter; import jcgp.backend.resources.parameters.ParameterStatus; import jcgp.gui.settings.SettingsPane; @@ -23,6 +23,7 @@ import jcgp.gui.settings.SettingsPane; public class GUIDoubleParameter extends GUIParameter<Number> { private TextField textField; + private DecimalFormat decimalFormat; /** * This default-visibility constructor is intended for use @@ -31,6 +32,8 @@ public class GUIDoubleParameter extends GUIParameter<Number> { */ GUIDoubleParameter(Parameter<Number> parameter, SettingsPane sp) { super(parameter, sp); + decimalFormat = new DecimalFormat(); + decimalFormat.setMaximumFractionDigits(10); } @Override @@ -38,23 +41,12 @@ public class GUIDoubleParameter extends GUIParameter<Number> { textField = new TextField(String.valueOf(parameter.get())); textField.setStyle(VALID_PARAMETER_STYLE); textField.setAlignment(Pos.CENTER_RIGHT); - + textField.prefWidthProperty().bind(widthProperty().divide(2)); return textField; } @Override protected void setControlListeners() { - /* filter keypresses and ignore anything that is not a number - * and any decimal point beyond the first ones */ - textField.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() { - @Override - public void handle( KeyEvent t ) { - char ch = t.getCharacter().toCharArray()[t.getCharacter().toCharArray().length - 1]; - if (!((ch >= '0' && ch <= '9') || (ch == '.' && !textField.getText().contains(".")))) { - t.consume(); - } - } - }); /* pass the TextField value back to the parameter whenever it gets * modified, provided it is not empty and the experiment isn't running */ textField.textProperty().addListener(new ChangeListener<String>() { @@ -62,11 +54,17 @@ public class GUIDoubleParameter extends GUIParameter<Number> { public void changed( ObservableValue<? extends String> observable, String oldValue, String newValue) { - if (!newValue.isEmpty() && !settingsPane.isExperimentRunning()) { - parameter.set(Double.parseDouble(newValue)); - settingsPane.revalidateParameters(); + if (!settingsPane.isExperimentRunning()) { + if (newValue.matches("([0-9]*[.]*[0-9]*)")) { + if (!newValue.isEmpty()) { + double value = Double.parseDouble(newValue); + parameter.set(value); + settingsPane.revalidateParameters(); + } + } else { + refreshValue(); + } } - } }); /* if the TextField loses focus and is empty, set it to the current @@ -76,8 +74,8 @@ public class GUIDoubleParameter extends GUIParameter<Number> { public void changed( ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { - if (!newValue && textField.getText().isEmpty()) { - textField.setText(String.valueOf(parameter.get())); + if (!newValue) { + refreshValue(); } } }); @@ -102,6 +100,7 @@ public class GUIDoubleParameter extends GUIParameter<Number> { @Override public void refreshValue() { - textField.setText(String.valueOf((parameter).get())); + System.out.println("setting text to: " + parameter.get().doubleValue()); + textField.setText(decimalFormat.format(parameter.get().doubleValue())); } } |