Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PropertyChangeSupport for SpinnerNumberModel

I want to listen to the changes of the value of the SpinnerNumberModel for a JSpinner.
I create a PropertyChangeSupport and put the model into it.

I need the propertyChangeListener, because it shows me the old and new value of the property.

The snippet doesn't work: the propertyChange method prints nothing, when I click on the JSpinner.
A simple ChangeListener give only the new value, but I need also the old value, how can I get it?

package de.unikassel.jung;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

public class PropertyChangeTest implements PropertyChangeListener {

    public static void main(String[] args) {
        new PropertyChangeTest();
    }

    public PropertyChangeTest() {
        JFrame frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        int value = 1;
        int min = 0;
        int max = 10;
        int step = 1;
        SpinnerNumberModel spinnerModel = new SpinnerNumberModel(value, min, max, step);

        PropertyChangeSupport pcs = new PropertyChangeSupport(spinnerModel);
        pcs.addPropertyChangeListener("value", this);

        JSpinner spinner = new JSpinner(spinnerModel);
        frame.getContentPane().add(spinner);
        frame.setVisible(true);
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt);
        System.out.println(evt.getSource());
    }

}
like image 606
timaschew Avatar asked Aug 06 '11 23:08

timaschew


People also ask

What is PropertyChangeSupport?

public class PropertyChangeSupport extends Object implements Serializable. This is a utility class that can be used by beans that support bound properties. It manages a list of listeners and dispatches PropertyChangeEvent s to them.

What is FirePropertyChange?

FirePropertyChange(PropertyChangeEvent) Fires a property change event to listeners that have been registered to track updates of all properties or a property with the specified name. FirePropertyChange(String, Object, Object)


1 Answers

Instead of listening to the model, listen to the editor's JFormattedTextField, as suggested below.

JSpinner spinner = new JSpinner(new SpinnerNumberModel(1, 0, 10, 1));
JSpinner.DefaultEditor editor = (JSpinner.DefaultEditor) spinner.getEditor();
editor.getTextField().addPropertyChangeListener("value", this);
like image 125
trashgod Avatar answered Sep 21 '22 15:09

trashgod