JSpinner with SpinnerNumberModel always returns 0

I created a component JSpinnerwith SpinnerNumberModelas a model:

JSpinner spinbox = new JSpinner(new SpinnerNumberModel(2, 1, 7, 1));

I added a listener to detect changes.

spinbox.addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent arg0) {
        synchronized (this) {
            System.out.println("New value: " +
              ((Integer)_spiNumOfAIs.getValue()).intValue());
        }
    }
});

All I see is this:

New value: 0

New value: 0

Am I reading the spinbox value incorrectly?

If you are curious about the block synchronized: I am new to Swing, and I don’t know whether the executors of the actions are executed in the same thread where I created my own JDialogor not, that's why I put threads for all action listeners in order to ensure security. _spiNumOfAIsis a member variable.

: , ... , JSpinner spinbox, JSpinner _spiNumOfAis, - , .

+3
1

Swing EDT, EDT. , ChangeListener EDT, . , EventQueue.isDispatchThread , true. Swing concurrency, :

, . , Swing, .

, , . , spinner

import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.EventQueue;

public class JSpinnerDemo {

  public static JFrame createFrame(){
    JFrame frame = new JFrame(  );
    frame.add( createSpinner() );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();

    return frame;
  }

  public static JSpinner createSpinner(){
    JSpinner spinner = new JSpinner( new SpinnerNumberModel( 2,1,7,1 ) );
    spinner.addChangeListener( new ChangeListener() {
      @Override
      public void stateChanged( ChangeEvent e ) {
        JSpinner spinner = ( JSpinner ) e.getSource();
        SpinnerModel spinnerModel = spinner.getModel();
        System.out.println(spinnerModel.getValue());
      }
    } );
    return spinner;
  }
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        createFrame().setVisible( true );
      }
    } );
  }
}

, . JSpinner javadoc, , javadoc. Swing-

+4

All Articles