JSpinner のデフォルトの 10 進数形式を変更して、小数点以下の桁数を指定しますが、他の形式のロケールは特定のままにします。
しかし、私がこれを行う場合
@Test public void fails() {
JSpinner spinner = new JSpinner();
NumberEditor editor = new JSpinner.NumberEditor(spinner);
editor.getFormat().setMinimumFractionDigits(3);
spinner.setEditor(editor);
assertEquals(0, spinner.getValue());
assertEquals("0.000", ((NumberEditor) spinner.getEditor()).getTextField().getText());
// FAIL HERE with "0"
spinner.setValue(0.01);
assertEquals("0.010", ((NumberEditor) spinner.getEditor()).getTextField().getText());
}
Sun のサンプル コードで見つけたと思いますが、フォーマットの変更が検出されていないため、フォーマットされた初期値は「0」です。
形式の画像を明示的に設定できます
@Test public void delMe() {
JSpinner spinner = new JSpinner();
spinner.setEditor(new JSpinner.NumberEditor(spinner, "0.000"));
assertEquals(0, spinner.getValue());
assertEquals("0.000", ((NumberEditor) spinner.getEditor()).getTextField().getText());
}
ただし、これはコンマなどに関するロケール設定を尊重しません。