JSpinner Value change Events

后端 未结 6 2138
梦谈多话
梦谈多话 2020-12-29 03:05

How to make the update immediately when the jSpinner value was changed.

ChangeListener listener = new ChangeListener() {
  public void stateChanged(ChangeEve         


        
6条回答
  •  醉酒成梦
    2020-12-29 03:50

    Problem here is that when you edit the JSpinner value manually by typing from the keyboard, the stateChanged event is not fired until the focus is lost by the JSpinner or until Enter key has been pressed.

    If you want to upload the value, a KeyListener is needed which will perform a setValue in the JSpinner for each typed key.

    I leave an example here for a JSpinner with a SpinnerNumberModel:

    JSpinner spinner= new JSpinner();
    spinner.setModel(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1));
    spinner.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            jLabel.setText(spinner.getValue());
        }
    });
    final JTextField jtf = ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField();
    jtf.addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            String text = jtf.getText().replace(",", "");
            int oldCaretPos = jtf.getCaretPosition();
            try {
                Integer newValue = Integer.valueOf(text);
                spinner.setValue(newValue);
                jtf.setCaretPosition(oldCaretPos);
            } catch(NumberFormatException ex) {
                //Not a number in text field -> do nothing
            }
        }
    });
    

提交回复
热议问题