更改jSpinner值后如何立即进行更新。
ChangeListener listener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
jLabel.setText(e.getSource());
}
};
spinner1.addChangeListener(listener);
上面的代码不会自动更改标签文本,它需要您再次单击任意位置以进行更新。
最佳答案
答案是配置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并公开允许配置的方法