Search code examples
javaswingjappletjslider

Fetch double value from customized JSlider


I have created a JSLider from 0 to 1 with an increment of 0.1. I wrote the following code to implement it but I am not sure how to fetch values from the slider since the function getValue() only fetches integer values. In my case it always fetches 10 no matter where I move the slider. Please can anyone tell me how I can fetch the double values from my slider.

        slider=new JSlider();
        slider.setMajorTickSpacing(1);
        slider.setMaximum(10);
        slider.setPaintLabels(true);
        slider.setPaintTicks(true);
        slider.setPreferredSize(new java.awt.Dimension(230, 46));
        Format f = new DecimalFormat("0.0");
        Hashtable<Integer, JComponent> labels = new Hashtable<Integer,     JComponent>();
        for(int i=0;i<=10;i++){
            JLabel label = new JLabel(f.format(i*0.1));
            label.setFont(label.getFont().deriveFont(Font.PLAIN));
            labels.put(i,label);
        }
        slider.setLabelTable(labels);

Following is the code for the listener

    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent event) {
          if(!slider.getValueIsAdjusting())
          {
              double value = slider.getValue();
          System.out.println("value"+value);


          }

      }
    });

Thanks in advance.

Regards, Colin


Solution

  • Your code works perfectly as is. The only change I did was to divide by 10.0 so we get a double:

    slider.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent event) {
            if (!slider.getValueIsAdjusting()) {
                double v = slider.getValue() / 10.0;
                System.out.println("value: "+v);
            }
        }
    });