> I want my JSpinner control to change step based on current value of
> spinner
[quoted text clipped - 4 lines]
> Thanks,
> Alex
Create your own implementation of the SpinnerModel interface and set
this as the model of your JSpinner. For example:
import java.awt.BorderLayout;
import javax.swing.AbstractSpinnerModel;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SwingUtilities;
public class MySpinnerModel extends AbstractSpinnerModel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MySpinnerModel mySpinnerModel = new MySpinnerModel();
JSpinner spinner = new JSpinner();
spinner.setModel(mySpinnerModel);
JFrame app = new JFrame();
app.setSize(400, 300);
app.getContentPane().add(spinner, BorderLayout.NORTH);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.validate();
app.setVisible(true);
}
});
}
private int lowerBound = -20;
private int upperBound = +20;
private int value = 0;
public Object getNextValue() {
int newValue;
if (this.value <= 10) {
newValue = this.value + 1;
} else {
newValue = this.value + 3;
}
if (newValue <= upperBound) {
return new Integer(newValue);
} else {
return null;
}
}
public Object getPreviousValue() {
int newValue;
if (this.value <= 10) {
newValue = this.value - 1;
} else {
newValue = this.value - 3;
}
if (newValue >= lowerBound) {
return new Integer(newValue);
} else {
return null;
}
}
public Object getValue() {
return new Integer(value);
}
private void setValue(int value) {
if (this.value != value) {
this.value = value;
fireStateChanged();
}
}
public void setValue(Object value) {
if (value instanceof String) {
try {
setValue(Integer.parseInt(((String) value).trim()));
} catch (NumberFormatException ex) {
System.err.println("Unsupported value: " + value);
}
} else if (value instanceof Number) {
setValue(((Number) value).intValue());
} else {
System.err.println("Unsupported value: " + value);
}
}
}

Signature
Regards,
Roland