diff --git a/convex-gui/src/main/java/convex/gui/components/DecimalAmountField.java b/convex-gui/src/main/java/convex/gui/components/DecimalAmountField.java index bd4fa99ef..bf415dcb9 100644 --- a/convex-gui/src/main/java/convex/gui/components/DecimalAmountField.java +++ b/convex-gui/src/main/java/convex/gui/components/DecimalAmountField.java @@ -16,6 +16,9 @@ import convex.core.data.prim.AInteger; import convex.core.text.Text; +/** + * Component displaying a decimal quantity in an editable text field, constrained to a decimal with a maximum number of digits + */ @SuppressWarnings("serial") public class DecimalAmountField extends JTextField { @@ -60,8 +63,10 @@ public void insertString(int offset, String s, AttributeSet a) throws BadLocatio dotPos=i; continue; } - return; // not valid so exit function early + n=i; // end of valid input + break; } + if (n==0) return; if (newChars[0]=='.') { if (dotPos>=0) { @@ -82,8 +87,12 @@ public void insertString(int offset, String s, AttributeSet a) throws BadLocatio } } + // String to insert + String insertS=new String(newChars); + if (n{ - System.err.println(r); + System.err.println(qs + " => " + r); ACell val=r.getValue(); if (val instanceof AInteger) { receiveLabel.setBalance((AInteger) val); diff --git a/convex-gui/src/test/java/convex/gui/components/ComponentTest.java b/convex-gui/src/test/java/convex/gui/components/ComponentTest.java index 572235303..e78d6b56c 100644 --- a/convex-gui/src/test/java/convex/gui/components/ComponentTest.java +++ b/convex-gui/src/test/java/convex/gui/components/ComponentTest.java @@ -29,5 +29,34 @@ public class ComponentTest { af.setText(" 3.11111111"); assertEquals(3111,af.getAmount().longValue()); + af.setText("401 "); + assertEquals(401000,af.getAmount().longValue()); + + af.setText(" 401.2 "); + assertEquals(401200,af.getAmount().longValue()); + + af.setText(" fghrt "); + assertNull(af.getAmount()); + } + + @Test public void testDecimalAmountFieldNoDecimals() { + DecimalAmountField af=new DecimalAmountField(0); + assertEquals(CVMLong.ZERO,af.getAmount()); + + af.setText(" 3.444"); + assertEquals(3,af.getAmount().longValue()); + + af.setText("1234.0"); + assertEquals(1234,af.getAmount().longValue()); + + af.setText(" 0.0001 "); + assertEquals(0,af.getAmount().longValue()); + + af.setText("."); + assertNull(af.getAmount()); + + af.setText("13."); + assertEquals(13,af.getAmount().longValue()); + } }