2014-07-23 31 views
2

如果我的的JSpinner用的SpinnerNumberModel

double v = 3.146; 

的微调工作向上/向下箭头的初始值运行下面的Java微调例子如预期时,使用4位数字的初始值被卡住。但是,如果我使用起始值

double v = 3.1466; 

箭头按钮不再起作用。

据我所知,这与将显示值舍入到三位十进制数字有关,后者的结果为3.147,当然在微调器的范围之外。但是,我的原始值显然不超出指定的最大值。

有没有办法确保只要我的初始值在[min,max]范围内,微调按钮按预期工作?

public class spinner_test { 
    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     JFrame f = new JFrame("Frame"); 

     double v = 3.1466; // Makes the spinner buttons non functional 
     // double v = 3.146; // Work OK 
     SpinnerNumberModel m = new SpinnerNumberModel(v, 0, v, 0.005); 
     JSpinner s = new JSpinner(m); 

     f.add(s); 
     f.setVisible(true); 
     f.pack(); 
     } 
    }); 
    } 
} 

回答

3

设置微调器将显示4位小数的自定义编辑:

JSpinner.NumberEditor numberEditor = new JSpinner.NumberEditor(s,"0.0000"); 
s.setEditor(numberEditor); 
+0

我不一定要显示四个小数。即使如此,同样的问题仍然存在,但是现在在具有五位小数的原始数据和具有四位小数的显示值之间。 – Kavka

+0

“五位小数” - 你是指5位小数?你的问题是约4位小数。使用您的代码时,向下箭头即可运行,向上箭头将在您使用向下箭头后生效。 – camickr

+0

对不起,如果我不清楚我的解释。基本上,我的意思是只要在原始值中指定的小数位数(例如5位数)与微调器中显示的小数位数(例如4位数)有差异,就有可能由于四舍五入,微调箭头按钮将停止工作。我正在寻找一种解决方案,它不需要知道原始值中使用了多少个数字。 – Kavka