From 7b780462eafd7a624c061078ebe9f4b7f3b58daa Mon Sep 17 00:00:00 2001 From: OMGeeky Date: Sun, 22 Jun 2025 17:48:12 +0200 Subject: [PATCH] handle wrong values passed to addNumberField better --- .idea/inspectionProfiles/duplicates.xml | 1684 +++++++++++++++++ .../gpl/rpg/atcontentstudio/ui/Editor.java | 24 +- 2 files changed, 1704 insertions(+), 4 deletions(-) create mode 100644 .idea/inspectionProfiles/duplicates.xml diff --git a/.idea/inspectionProfiles/duplicates.xml b/.idea/inspectionProfiles/duplicates.xml new file mode 100644 index 0000000..4915121 --- /dev/null +++ b/.idea/inspectionProfiles/duplicates.xml @@ -0,0 +1,1684 @@ + + + + \ No newline at end of file diff --git a/src/com/gpl/rpg/atcontentstudio/ui/Editor.java b/src/com/gpl/rpg/atcontentstudio/ui/Editor.java index f43e830..cd462a2 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/Editor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/Editor.java @@ -265,12 +265,21 @@ public abstract class Editor extends JPanel implements ProjectElementListener { return addIntegerField(pane, label, initialValue, 0, allowNegatives, editable, listener); } - public static > JSpinner addNumberField(JPanel pane, String label, boolean editable, final FieldUpdateListener listener, Number initialValue, Number defaultValue, T minimum, T maxValue, Number stepSize) { + public static > JSpinner addNumberField(JPanel pane, String label, boolean editable, final FieldUpdateListener listener, T minimum, T maximum, Number stepSize, Number value, Number defaultValue) { JPanel tfPane = new JPanel(); tfPane.setLayout(new JideBoxLayout(tfPane, JideBoxLayout.LINE_AXIS, 6)); JLabel tfLabel = new JLabel(label); tfPane.add(tfLabel, JideBoxLayout.FIX); - final JSpinner spinner = new JSpinner(new SpinnerNumberModel(initialValue != null ? initialValue : defaultValue, minimum, maxValue, stepSize)); + if (!(((minimum == null) || (((Comparable)minimum).compareTo(value) <= 0)) && + ((maximum == null) || (((Comparable)maximum).compareTo(value) >= 0)))) { + try{ + throw new IllegalArgumentException("Value for number field outside of range: %s <= %s <= %s".formatted(minimum, value, maximum)); + }catch (IllegalArgumentException e){ + e.printStackTrace(); + value = defaultValue; + } + } + final JSpinner spinner = new JSpinner(new SpinnerNumberModel(value, minimum, maximum, stepSize)); ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT); spinner.setEnabled(editable); ((DefaultFormatter) ((NumberEditor) spinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true); @@ -295,7 +304,10 @@ public abstract class Editor extends JPanel implements ProjectElementListener { return spinner; } public static JSpinner addIntegerField(JPanel pane, String label, Integer initialValue, Integer defaultValue, boolean allowNegatives, boolean editable, final FieldUpdateListener listener) { - return addNumberField(pane, label, editable, listener, initialValue, defaultValue, allowNegatives ? Integer.MIN_VALUE : 0, Integer.MAX_VALUE, 1); + int value = initialValue != null ? initialValue : defaultValue; + int minimum = allowNegatives ? Integer.MIN_VALUE : 0; + int maxValue = Integer.MAX_VALUE; + return addNumberField(pane, label, editable, listener, minimum, maxValue, 1, value, defaultValue); } @@ -453,7 +465,11 @@ public abstract class Editor extends JPanel implements ProjectElementListener { // } public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable, final FieldUpdateListener listener) { - return addNumberField(pane, label, editable, listener, initialValue, 0.0d, 0.0d, new Float(Float.MAX_VALUE).doubleValue(), 1.0d); + double minimum = 0.0d; + double defaultValue = 0.0d; + double value = initialValue != null ? initialValue : minimum; + double maximum = new Float(Float.MAX_VALUE).doubleValue(); + return addNumberField(pane, label, editable, listener, minimum, maximum, 1.0d, value, defaultValue); } public static IntegerBasedCheckBox addIntegerBasedCheckBox(JPanel pane, String label, Integer initialValue, boolean editable) {