JSpinner返回默认值而不是键入的值

时间:2014-04-28 15:15:45

标签: java swing jspinner

我有JSpinner SpinnerNumberModel (1, Double.MIN_VALUE, Double.MAX_VALUE, 0.01)

如果我直接输入JSpinner - 1000,请在某个对话框中点击确定,然后获取spinner.getValue()它将返回' 1'而不是1000。

如果我输入1000并将焦点更改为其他位置,例如点击JDialog的空间并在此之后读取值将正确= 1000。如果我将使用微调器的箭头更改值 - 值也将是正确的。

如何解决Jspinner所以它会支持输入值,而不会在获得价值之前先将焦点转移到其他地方?

Java JDK 1.6.0_23

1 个答案:

答案 0 :(得分:1)

JSpinner JavaDoc描述了为什么会发生这种情况以及如何解决它。

  

JSpinner有一个子组件,负责显示和可能更改模型的当前元素或值,称为编辑器。编辑器由JSpinner的构造函数创建,可以使用editor属性进行更改。 JSpinner的编辑器通过监听ChangeEvents与模型保持同步。如果用户更改了编辑器显示的值,则模型的值可能与编辑器的值不同。要确保模型与编辑器具有相同的值,请使用commitEdit方法,例如:

try {
    spinner.commitEdit();
}
catch (ParseException pe) {{
    // Edited value is invalid, spinner.getValue() will return
    // the last valid value, you could revert the spinner to show that:
    JComponent editor = spinner.getEditor()
    if (editor instanceof DefaultEditor) {
        ((DefaultEditor)editor).getTextField().setValue(spinner.getValue();
    }
    // reset the value to some known value:
    spinner.setValue(fallbackValue);
    // or treat the last valid value as the current, in which
    // case you don't need to do anything.
}
return spinner.getValue();