Java 当使用带有四个十进制数字的初始值时,带有SpinnerNumberModel的JSpinner会被卡住
如果我运行以下Java微调器示例,起始值为Java 当使用带有四个十进制数字的初始值时,带有SpinnerNumberModel的JSpinner会被卡住,java,swing,jspinner,Java,Swing,Jspinner,如果我运行以下Java微调器示例,起始值为 double v = 3.146; double v = 3.1466; 微调器上的上/下箭头按预期工作。但是,如果我使用的起始值为 double v = 3.146; double v = 3.1466; 箭头按钮似乎不再工作 据我所知,这与将显示值四舍五入到三位十进制数字有关,后者的结果是值为3.147,当然超出了微调器的范围。但是,我的原始值显然没有超出指定的最大值 有没有办法确保只要我的初始值在[min,max]范围内,微调器按钮就可以
double v = 3.146;
double v = 3.1466;
微调器上的上/下箭头按预期工作。但是,如果我使用的起始值为
double v = 3.146;
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();
}
});
}
}
为微调器设置自定义编辑器以显示4位小数:
JSpinner.NumberEditor numberEditor = new JSpinner.NumberEditor(s,"0.0000");
s.setEditor(numberEditor);
我不一定要显示四个小数。即使在那时,同样的问题仍然存在,但现在原始数据有五位小数,显示值有四位小数。
有五位小数
-五位小数是什么意思?你的问题大约是4位小数。使用您的代码时,向下箭头立即起作用,使用向下箭头后向上箭头将起作用。如果我不清楚我的解释,请原谅。基本上,我的意思是,只要原始值中指定的小数位数(例如5位数)与微调器中显示的小数位数(例如4位数)存在差异,微调器箭头按钮就有可能因舍入而停止工作。我正在寻找一种解决方案,它不需要知道原始值中使用了多少位数字。我想您需要查看SpinnerNumberModel。它实现了getPrevious()
和getNext()
方法。所以我想它会对可能发生的任何舍入负责。