Anzeige:
Ergebnis 1 bis 6 von 6

Thema: JSpinner: Wert vor dem Anzeigen ggf. umrechnen

  1. #1
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211

    JSpinner: Wert vor dem Anzeigen ggf. umrechnen

    Hallo,
    Ich hab ein Problem mit dem JSpinner:
    Ich möchte einen Spinner erzeugen, der je nach Rückgabewert einer Methode den angezeigten Wert ändert, getValue() soll jedoch davon unbeeinflusst bleiben (getValue() soll immer mg/dl als Integer zurückgeben)
    Die spezifischen Einheiten, die angezeigt weden sollen, sind mg/dl und mmol/l, wobei 1 mg/dl = 0.0555 mmol/l entsprechen.

    Ich hab schon recht lange dran gesessen, aber nicht hinbekommen, was nicht eine Endlosrekursion oder eine ClassCastException geschmissen hätte...
    Ich hoffe, meine Problemstellung ist verständlich.

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Kannst du nicht einfach den aktuellen Wert auslesen, neue Achse setzen, Wert umrechnen und anzeigen? Du musst dir dann halt irgendwo merken, welche Achse aktuell gerade angezeigt wird

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Hab ich auch schon versucht, aber das sieht irgendwie recht komisch aus.
    Ich hatte dabei zwei Spinner erstellt und je nach Einstellung per add und remove im JPanel ausgetauscht, aber dabei verschieben sich die Spinner irgendwie nach unten, was im Zusammenhang mit den Labels recht unschön wirkt.
    Ansonsten, wenn du einen Vorschlag hast, wie sich das Problem mit dem Verschieben lösen lässt, gerne her damit .

  4. #4
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Also, ich habs dann doch mal so gelöst.
    Aber das Problem mit dem Verschieben ist trotz der Nutzung von JViewport noch da. Also noch immer die Frage: Wie lässt sich das lösen?
    Code:
    static final public class BGChooser
            extends JViewport
    {
        final private JSpinner mg_per_dl, mmol_per_l;
        
        BGChooser(int defaultValue, int min, int max)
        {
            mg_per_dl = new JSpinner(new SpinnerNumberModel(defaultValue, min, max, 10));
            mmol_per_l = new JSpinner(new SpinnerNumberModel(defaultValue * 0.0555d, min * 0.0555d, max * 0.0555d, 0.1d));
            setView(Settings.use_mg_per_dl() ? mg_per_dl : mmol_per_l);
        }
        
        void updateView()
        {
            if (Settings.use_mg_per_dl())
            {
                mg_per_dl.setValue((int)(((Number)mmol_per_l.getValue()).doubleValue() / 0.0555d));
                setView(mg_per_dl);
            }
            else
            {
                mmol_per_l.setValue(((Number)mg_per_dl.getValue()).doubleValue() * 0.0555d);
                setView(mmol_per_l);
            }
        }
        
        public int getValue()
        {
            if (Settings.use_mg_per_dl())
                return ((Number)mg_per_dl.getValue()).intValue();
            return (int)(((Number)mmol_per_l.getValue()).doubleValue() / 0.0555d);
        }
        
        public void setValue(int value)
        {
            if (Settings.use_mg_per_dl())
                mg_per_dl.setValue(value);
            else
                mmol_per_l.setValue(value * 0.0555d);
        }
    }
    Hier noch Setting.set_use_mg_per_dl(), zwecks Aufruf von updateView():
    Code:
    static void set_use_mg_per_dl(boolean use_mg_per_dl)
    {
        if (mg_per_dl != use_mg_per_dl)
        {
            mg_per_dl = use_mg_per_dl;
            Utilities.updateBGChoosers();
        }
    }

  5. #5
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Jetzt weiß ich, wo das Problem liegt: GroupLayout zickt da rum...
    Ich nutz jetzt GridLayout, Problem beseitigt.

    Aber trotzdem danke!

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von John W Beitrag anzeigen
    Aber trotzdem danke!
    Gern geschehen

    Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •