package magic.ui.widget; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class SliderPanel extends JPanel implements ChangeListener { private final JSlider slider; private final JLabel titleLabel; private final JLabel valueLabel; public SliderPanel(final String title, final int min,final int max,final int spacing,final int value,final boolean snapToTick) { titleLabel=new JLabel(title); titleLabel.setPreferredSize(new Dimension(title.isEmpty() ? 0 : 90, 0)); titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); valueLabel=new JLabel(); valueLabel.setHorizontalAlignment(JLabel.CENTER); valueLabel.setPreferredSize(new Dimension(30,0)); slider=new JSlider(); slider.setOpaque(false); slider.addChangeListener(this); slider.setMinimum(min); slider.setMaximum(max); slider.setValue(value); slider.setPaintTicks(false); slider.setSnapToTicks(snapToTick); slider.setMajorTickSpacing(spacing); slider.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { dispatchEvent(e); } @Override public void mouseExited(MouseEvent e) { dispatchEvent(e); } }); setLayout(new MigLayout("insets 0")); add(titleLabel); add(slider, "w 100%"); add(valueLabel); } public void setFontBold(boolean b) { titleLabel.setFont(titleLabel.getFont().deriveFont(b ? Font.BOLD : Font.PLAIN)); } public SliderPanel(final String title ,final int min,final int max,final int spacing,final int value) { this(title, min, max, spacing, value, true); } public void setTextColor(final Color color) { titleLabel.setForeground(color); valueLabel.setForeground(color); } public int getValue() { return slider.getValue(); } public void addChangeListener(final ChangeListener listener) { slider.addChangeListener(listener); } @Override public void stateChanged(final ChangeEvent e) { valueLabel.setText(Integer.toString(slider.getValue())); } @Override public void setEnabled(boolean b) { for (Component c : getComponents()) { c.setEnabled(b); } super.setEnabled(b); } @Override public void setToolTipText(String text) { super.setToolTipText(text); slider.setToolTipText(text); } }