2
我有一个JSlider,我希望它与我的JFreeChart点相匹配,但问题是我的图的x值具有诸如8.993和8.997等值,所以舍入会导致问题。有没有一种方法可以让我的滑块匹配双打(我知道这是一个常见问题,但我找不到实际的解决方案),或者有人可以给我一个关于如何做一个正常的JSlider工作的建议为我的数据?具有接近双精度值的JSlider
预先感谢您
我有一个JSlider,我希望它与我的JFreeChart点相匹配,但问题是我的图的x值具有诸如8.993和8.997等值,所以舍入会导致问题。有没有一种方法可以让我的滑块匹配双打(我知道这是一个常见问题,但我找不到实际的解决方案),或者有人可以给我一个关于如何做一个正常的JSlider工作的建议为我的数据?具有接近双精度值的JSlider
预先感谢您
这是可以做到的,但它会要求你设置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);
}
}