Java 当使用带有四个十进制数字的初始值时,带有SpinnerNumberModel的JSpinner会被卡住

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]范围内,微调器按钮就可以

如果我运行以下Java微调器示例,起始值为

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()
方法。所以我想它会对可能发生的任何舍入负责。