Forums Register Login

Unable to use JSpinner properly.

+Pie Number of slices to send: Send
Hello sir, friends, madam

I am using JSpinner and following are the condition that I need to check.
1. JSpinner contains numbers with range from 1 to 720
2. Clicking the button in JSpinner should increment the value by 1
3. If the user types any value which is out of range then nearest value should be shown. Example if user doesnt enter any value in textfield of JSpinner and keeps it blank. He/She then clicks the up or down arrow button of JSpinner. Now under such cases value 1 should be displayed in the JSPinner.
4. If user types a value beyond 720 then value 720 should be displayed.

I tried using JSpinner.NumberEditor for numeric values and set the associated min, max and step values in JSpinner. The problem I am facing is when user performs 3rd and 4th steps metioned above.
I tried adding ChangeListener and DocumentListener but I am getting some kind of exceptions.

Please can anyone suggest me some right approach to come out of this problem.

Waiting for your suggestions.

Thanks and Regards
Rohit.
[ September 18, 2006: Message edited by: Rohit Bhagwat ]
+Pie Number of slices to send: Send
 

Originally posted by Rohit Bhagwat:
I am getting some kind of exceptions.



99% of the time, an exception will tell you exactly what's going on. Read the message carefully, and look at the lines of code pointed to by the stack trace (the line on top is the one that where the error occurred.) If it doesn't make sense to you, cut-and-paste it here for us to see.
+Pie Number of slices to send: Send
set your own UI, and override createNextButton() and createPreviousButton()
remove the actionListeners from the above buttons
add your own actionListener where you check the textField's text (not the spinner's value),
and adjust if outside of range.
you will also need code to + or - for normal inside-range values
+Pie Number of slices to send: Send
Here's the stack trace.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1343)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:662)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1441)
at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:925)
at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:105)
at javax.swing.text.InternationalFormatter.install(InternationalFormatter.java:268)
at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:443)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:767)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:480)
at javax.swing.JSpinner$DefaultEditor.stateChanged(JSpinner.java:696)
at javax.swing.JSpinner.fireStateChanged(JSpinner.java:426)
at javax.swing.JSpinner$ModelListener.stateChanged(JSpinner.java:353)
at javax.swing.AbstractSpinnerModel.fireStateChanged(AbstractSpinnerModel.java:102)
at javax.swing.SpinnerNumberModel.setValue(SpinnerNumberModel.java:430)
at com.core.java_ui.pagesetup.OptionsTab$SpinnerDocumentListener.updateSpinner(OptionsTab.java:294)
at com.core.java_ui.pagesetup.OptionsTab$SpinnerDocumentListener.insertUpdate(OptionsTab.java:258)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:184)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:754)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:711)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:673)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1441)
at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:925)
at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:105)
at javax.swing.text.InternationalFormatter.install(InternationalFormatter.java:268)
at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:443)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:767)
at javax.swing.JFormattedTextField.processFocusEvent(JFormattedTextField.java:614)
at java.awt.Component.processEvent(Component.java:5244)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1810)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:827)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:478)
at java.awt.Component.dispatchEventImpl(Component.java:3841)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
+Pie Number of slices to send: Send
+Pie Number of slices to send: Send
Thanks Craig. Actually I feel this is slightly less user friendly because user cant clear up the value in the spinner and type in some fresh value. The constraint is that some valid value must be present. Actually in my case user can clear up any value and can also type in any invalid value. But once he presses the increment or decrement arrow button associated with JSpinner then the nearest limiting value should be displayed. i.e if he clears all the value in the JSpinner then on clicking the increment or decrement buttons should result in displaying of minimum value in JSpinner. i.e if the lower limit is 1 and if the user clears the value from JSpinner then clicking the buttons should result in displaying value 1 in JSpinner. On similar lines if the user types large value which is greater than maximum value of JSpinner then on clicking the increment and decrement buttons should result in displaying of maximum value of JSpinner. Example if max value of JSpinner is 720 and user types say 72000 and clicks the increment/decrement buttons then 720 value should be displayed in the JSpinner.

Waiting for your suggestions.

Thanks and Regards
Rohit.
[ September 18, 2006: Message edited by: Rohit Bhagwat ]
Been there. Done that. Went back for more. But this time, I took this tiny ad with me:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com


reply
reply
This thread has been viewed 4292 times.
Similar Threads
KeyEvent
access hashmap in jsp
Trap up/down arrowbutton event in JSpinner
JSpinner
Problems in Form reset button
More...

All times above are in ranch (not your local) time.
The current ranch time is
Apr 16, 2024 04:10:33.