我有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
答案 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();