更改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并公开允许配置的方法

10-04 11:06