/* SpinnerWithSliderPanel.java created 2008-02-14 * */ package org.signalml.plugin.newstager.ui.components; import java.awt.Dimension; import java.awt.Font; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** SpinnerWithSliderPanel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class NewStagerSpinnerWithSliderPanel extends JPanel { private static final long serialVersionUID = 1L; private JSpinner spinner; private JSlider slider; private boolean lock = false; public NewStagerSpinnerWithSliderPanel(double value, double min, double max, double step) { super(); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); slider = new JSlider((int) min, (int) max, (int) value); int range = (((int) max)-((int) min)); slider.setMajorTickSpacing(range); slider.setMinorTickSpacing(range / 10); slider.setFont(slider.getFont().deriveFont(Font.PLAIN, 10)); slider.setExtent(0); slider.setPaintTicks(true); slider.setAlignmentY(JComponent.CENTER_ALIGNMENT); spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step)); Dimension spinnerDimension = new Dimension(120,25); spinner.setPreferredSize(spinnerDimension); spinner.setMinimumSize(spinnerDimension); spinner.setMaximumSize(spinnerDimension); spinner.setAlignmentY(JComponent.CENTER_ALIGNMENT); add(spinner); add(Box.createHorizontalStrut(3)); add(slider); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { if (lock) { return; } try { lock = true; spinner.setValue(slider.getValue()); } finally { lock = false; } } }); spinner.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { if (lock) { return; } try { lock = true; slider.setValue(((Number) spinner.getValue()).intValue()); } finally { lock = false; } } }); } public double getValue() { return ((Number) spinner.getValue()).doubleValue(); } public void setValue(double value) { spinner.setValue(value); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); spinner.setEnabled(enabled); slider.setEnabled(enabled); } }