当使用带有四位小数的初始值时,带有SpinnerNumberModel的JSpinner会卡住

时间:2014-07-23 15:42:26

标签: java swing jspinner

如果我运行以下Java spinner示例,其起始值为

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();
      }
    });
  }
}

1 个答案:

答案 0 :(得分:3)

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

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