[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[platform-swt-dev] Spinner with decimal values

Hi there,

I am writing in reference to http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg27236.html. The author of that post (dated 2006) was having troubles with input into the Spinner control not being handled properly. I am experiencing the same behavior. Here is a snippet I found online which actually exhibits the behavior quite nicely:

package great.ui;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

/*
* Floating point values in Spinner
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/


public class SpinnerExample {

   public static void main(String[] args) {
       Display display = new Display();
       Shell shell = new Shell(display);
       shell.setText("Spinner with float values");
       shell.setLayout(new GridLayout());
       final Spinner spinner = new Spinner(shell, SWT.NONE);
       // allow 3 decimal places
       spinner.setDigits(3);
       // set the minimum value to 0.001
       spinner.setMinimum(1);
       // set the maximum value to 20
       spinner.setMaximum(20000);
       // set the increment value to 0.010
       spinner.setIncrement(10);
       // set the seletion to 3.456
       spinner.setSelection(3456);
       spinner.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
               int selection = spinner.getSelection();
               int digits = spinner.getDigits();
               System.out.println("Selection is "
                       + (selection / Math.pow(10, digits)));
           }
       });
       shell.setSize(200, 200);
       shell.open();
       while (!shell.isDisposed()) {
           if (!display.readAndDispatch()) {
               display.sleep();
           }
       }
       display.dispose();
   }
}

If you enter "42.", "42.0", or "42.00", the value of spinner.getSelection() resolves correctly to 42000. However, if you enter "42" (without the decimal point), the value resolves to 42, which, after the digit multiplier is applied, becomes 0.0042. Has any progress been made with regard to this issue since the last post in 2006? Any assistance is greatly appreciated!

Regards,
T.J. VanSlyke