JSpinner Value change Events

后端 未结 6 2121
梦谈多话
梦谈多话 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 04:01

    The last answer can be rearranged a little to make it a little more flexible. You can simply use this new MyJSpinner in place of any JSpinner. The biggest change is that you can use this new version with any underlying model of the JSpinner (int, double, byte, etc.)

        public class MyJSpinner extends JSpinner{
            boolean setvalueinprogress=false;
            public MyJSpinner()
            {
                super();
                final JTextField jtf = ((JSpinner.DefaultEditor) getEditor()).getTextField();
                jtf.getDocument().addDocumentListener(new DocumentListener() {              
    
                        @Override
                        public void removeUpdate(DocumentEvent e) {
                            showChangedValue(e);    
                        }
    
                        @Override
                        public void insertUpdate(DocumentEvent e) {
                            showChangedValue(e);                
                        }
    
                        @Override
                        public void changedUpdate(DocumentEvent e) {
                            showChangedValue(e);    
                        }
    
                        private void showChangedValue(DocumentEvent e){
                            try {
                                if (!setvalueinprogress)
                                    MyJSpinner.this.commitEdit();      
                            } catch (NumberFormatException | ParseException ex) {
                                          //handle if you want
                                Exceptions.printStackTrace(ex);
                            }      
                       }
                });
            }
    
        @Override
        public void setValue(Object value) {
            setvalueinprogress=true;
            super.setValue(value); 
            setvalueinprogress=false;
        }
    
     }
    

提交回复
热议问题