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();
}
}
Lesezeichen