diff --git a/core/src/net/sf/openrocket/gui/adaptors/IntegerModel.java b/core/src/net/sf/openrocket/gui/adaptors/IntegerModel.java index e948918af..3b07d9054 100644 --- a/core/src/net/sf/openrocket/gui/adaptors/IntegerModel.java +++ b/core/src/net/sf/openrocket/gui/adaptors/IntegerModel.java @@ -6,6 +6,8 @@ import java.util.ArrayList; import java.util.EventListener; import java.util.EventObject; +import javax.swing.BoundedRangeModel; +import javax.swing.DefaultBoundedRangeModel; import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; @@ -83,7 +85,44 @@ public class IntegerModel implements StateChangeListener { return new IntegerSpinnerModel(); } + private class ValueSliderModel extends DefaultBoundedRangeModel implements BoundedRangeModel, StateChangeListener { + ValueSliderModel(){ + super(IntegerModel.this.getValue(), 0, minValue, maxValue); + } + @Override + public void setValue(int newValue) { + IntegerModel.this.setValue(newValue); + } + + @Override + public int getValue(){ + return IntegerModel.this.getValue(); + } + @Override + public void stateChanged(EventObject e) { + IntegerModel.this.fireStateChanged(); + } + + @Override + public void addChangeListener(ChangeListener l) { + IntegerModel.this.addChangeListener(l); + } + + @Override + public void removeChangeListener(ChangeListener l) { + IntegerModel.this.removeChangeListener(l); + } + + } + /** + * Returns a new BoundedRangeModel with the same base as the IntegerModel. + * + * @return A compatibility layer for Sliders. + */ + public BoundedRangeModel getSliderModel(){ + return new ValueSliderModel(); + } //////////// Main model ///////////// diff --git a/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java b/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java index cbdd76ce5..4d86ae005 100644 --- a/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java +++ b/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java @@ -6,7 +6,6 @@ import java.awt.event.ActionListener; import java.lang.reflect.Method; import java.util.EventObject; -import javax.swing.DefaultBoundedRangeModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JColorChooser; @@ -18,8 +17,6 @@ import javax.swing.JSeparator; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.SwingConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.appearance.Decal.EdgeMode; @@ -30,6 +27,7 @@ import net.sf.openrocket.gui.adaptors.BooleanModel; import net.sf.openrocket.gui.adaptors.DecalModel; import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.adaptors.EnumModel; +import net.sf.openrocket.gui.adaptors.IntegerModel; import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.ColorIcon; import net.sf.openrocket.gui.components.StyledLabel; @@ -274,16 +272,14 @@ public class AppearancePanel extends JPanel { {// Placeholder add(new JLabel(trans.get("AppearanceCfg.lbl.shine"))); - JSlider shine = new JSlider(new DefaultBoundedRangeModel(ab.getShine(), 0, 0, 100){{ - addChangeListener(new ChangeListener() { - @Override - public void stateChanged(final ChangeEvent e) { - ab.setShine( ((DefaultBoundedRangeModel)e.getSource()).getValue()); - } - }); - }}); - mDefault.addEnableComponent(shine, false); - add(shine, "w 100"); + IntegerModel shineModel = new IntegerModel(ab, "Shine", 0, 100); + JSpinner spin = new JSpinner(shineModel.getSpinnerModel()); + JSlider slide = new JSlider(shineModel.getSliderModel()); + mDefault.addEnableComponent(slide, false); + mDefault.addEnableComponent(spin, false); + + add(spin, "split 2, w 50"); + add(slide, "w 100"); }