SpinnerNumberModel + JSpinner = Anzeigeproblem

Romsl

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem. Ich habe einen JSpinner dem ich das SpinnerNumberModel zuweise.
Dies benutze ich um vom Jahr 1970 bis 2025 "spinnen" zu können. Nun habe ich folgendes Anzeigeproblem. Mir wird hier ein Tausendertrennzeichen angezeigt.
Bsp: 1.970, aber ich möchte nur 1970 haben.

Weiß jemand wie ich das beheben kann?

Danke

Romsl
 
Hallo,

Ich rate dir (wie eigentlich immer) ein eigenes Model zu schreiben. Wenn später mal noch andere Bedürfnisse auftauchen, kannste dein eigenes Model fix deinen Wünschen anpassen.

Also investiere die Zeit und schreib dir n eigenes SpinnerModel.

Gruss kahuna
 
Noch einmal ich =D

Wenn du dir Zeit sparen willst, kannst du auch einfach vom SpinnerNumberModel erben und die beiden Methoden

getValue()
getNextValue()
getPreviousValue()

überschreiben und dort den String (?) so formatieren, dass keine ' mehr da sind.

Gruss kahuna
 
Habs gerade versucht und es funktioniert bei mir nicht. Kann mir noch jemand weiterhelfen?

Code:
public class SelfSpinnerNumberModel extends SpinnerNumberModel {

  String value;

  public SelfSpinnerNumberModel(Number value, Comparable minimum, Comparable maximum, Number stepSize) {
    if ((value == null) || (stepSize == null)) {
      throw new IllegalArgumentException("value and stepSize must be non-null");
    }
    if (!(((minimum == null) || (minimum.compareTo(value) <= 0)) && ((maximum == null) ||
	(maximum.compareTo(value) >= 0)))) {
      throw new IllegalArgumentException("(minimum <= value <= maximum) is false");
    }
    super.setValue(value);
    super.setMinimum(minimum);
    super.setMaximum(maximum);
    super.setStepSize(stepSize);
  }

  public SelfSpinnerNumberModel(int value, int minimum, int maximum, int stepSize) {
    this(new Integer(value), new Integer(minimum), new Integer(maximum), new Integer(stepSize));
  }

  public void setValue(Object value) {
    if ((value == null) || !(value instanceof Number)) {
      throw new IllegalArgumentException("illegal value");
    }
    if (!value.equals(this.value)) {
      int point = value.toString().indexOf(".");
      //String valueString = value.toString().substring(point, point + 1);
      String valueString = value.toString();
      this.value = valueString;
      fireStateChanged();
    }
  }
}

Was mach ich falsch?

Danke

Romsl
 
Hallo,

Wenn du dir Zeit sparen willst, kannst du auch einfach vom SpinnerNumberModel erben und die beiden Methoden

getValue()
getNextValue()
getPreviousValue()

überschreiben und dort den String (?) so formatieren, dass keine ' mehr da sind.

Mach das mal und dann schau ma weiter.

Gruss kahuna
 
danke @kahuna

habs hinbekommen, hier der code (!fängt keine fehler ab)

Code:
import javax.swing.AbstractSpinnerModel;

public class SelfSpinnerNumberModel extends AbstractSpinnerModel {

  private String value;
  private int minimum = 0;
  private int maximum = 0;
  private int stepSize;

  public SelfSpinnerNumberModel(String value, int minimum, int maximum, int stepSize) {
    this.value = value;
    this.minimum = minimum;
    this.maximum = maximum;
    this.stepSize = stepSize;
  }

  public void setValue(Object value) {
    if (!value.equals(this.value)) {
      this.value = value.toString();
      fireStateChanged();
    }
  }

  public Object getPreviousValue() {
    return incrValue( -1);
  }

  public Object getNextValue() {
    return incrValue( +1);
  }

  public Object getValue() {
    return value;
  }

  protected Object incrValue(int dir) {
    String newValue = value;
    int v = 0;
    if (value instanceof String) {
      v = Integer.parseInt(value) + stepSize * dir;
      newValue = Integer.toString(v);
    }
    if ((maximum != 0) && (maximum < v)) {
      return null;
    }
    if ((minimum != 0) && (minimum > v)) {
      return null;
    }
    else {
      return newValue;
    }
  }
}
 
Zurück