2014-11-03 79 views
2

我有一個JSlider,我希望它與我的JFreeChart點相匹配,但問題是我的圖的x值具有諸如8.993和8.997等值,所以舍入會導致問題。有沒有一種方法可以讓我的滑塊匹配雙打(我知道這是一個常見問題,但我找不到實際的解決方案),或者有人可以給我一個關於如何做一個正常的JSlider工作的建議爲我的數據?具有接近雙精度值的JSlider

預先感謝您

回答

4

這是可以做到的,但它會要求你設置JSlider的的標籤表翻譯一個int爲雙(實際上是一個格式化的雙字符串),你也將需要翻譯滑塊的值也是雙精度值。例如:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.util.Dictionary; 
import java.util.Hashtable; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderEg { 
    public static void main(String[] args) { 
     int start = 8990; 
     int end = 9000; 
     int value = 8995; 

     final JSlider slider = new JSlider(start, end, value); 
     slider.setPaintLabels(true); 
     slider.setPaintTicks(true); 
     slider.setMajorTickSpacing(2); 
     slider.setMinorTickSpacing(1); 
     Dictionary<Integer, JLabel> labels = new Hashtable<>(); 
     for (int i = start; i <= end; i += 2) { 
     String text = String.format("%4.3f", i/1000.0); 
     labels.put(i, new JLabel(text)); 
     } 

     slider.setLabelTable(labels); 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setPreferredSize(new Dimension(400, 50)); 
     panel.add(slider, BorderLayout.PAGE_START); 

     slider.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent e) { 
      int value = slider.getValue(); 
      double sliderValue = value/1000.0; 
      System.out.printf("Slider Value: %4.3f%n", sliderValue); 
     } 
     }); 
     JOptionPane.showMessageDialog(null, panel); 
    } 
}