答案是配置在JFormattedTextField中使用的格式化程序,它是微调器编辑器的子代:
formatter.setCommitsOnValidEdit(true);
不幸的是,得到一个人的手就像介绍句一样长和肮脏:
final JSpinner spinner = new JSpinner();
JComponent comp = spinner.getEditor();
JFormattedTextField field = (JFormattedTextField) comp.getComponent(0);
DefaultFormatter formatter = (DefaultFormatter) field.getFormatter();
formatter.setCommitsOnValidEdit(true);
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
LOG.info("value changed: " + spinner.getValue());
}
});
一个稍微(但不是太多)更清洁的方法可能是子类NumberEditor和公开一个允许配置的方法