/* * Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of Substance Kirill Grouchnikov nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package test.check; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Hashtable; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSlider; import javax.swing.SwingUtilities; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; import test.check.command.ConfigurationCommand; /** * Test application panel for testing {@link JSlider} component. * * @author Kirill Grouchnikov */ public class SliderPanel extends ControllablePanel implements Deferrable { private boolean isInitialized; @Override public boolean isInitialized() { return this.isInitialized; } /** * A configure command that sets a titled border on the specified slider. * * @author Kirill Grouchnikov */ public static class SetTitleBorderCommand implements ConfigurationCommand<JSlider> { /* * (non-Javadoc) * * @see test.check.ConfigurationCommand#invoke(java.lang.Object) */ public void configure(JSlider slider) { slider.setBorder(BorderFactory.createTitledBorder("Title")); } } /** * A configure command that clears the border of the specified slider. * * @author Kirill Grouchnikov */ public static class ClearBorderCommand implements ConfigurationCommand<JSlider> { /* * (non-Javadoc) * * @see test.check.ConfigurationCommand#invoke(java.lang.Object) */ public void configure(JSlider slider) { slider.setBorder(null); } } /** * A configure command that configures the specified slider to snap to the * ticks. * * @author Kirill Grouchnikov */ public static class SnapToTicksCommand implements ConfigurationCommand<JSlider> { /* * (non-Javadoc) * * @see test.check.ConfigurationCommand#invoke(java.lang.Object) */ public void configure(JSlider slider) { slider.setSnapToTicks(true); } } /** * A configure command that configures the specified slider to not snap to * the ticks. * * @author Kirill Grouchnikov */ public static class UnsnapToTicksCommand implements ConfigurationCommand<JSlider> { /* * (non-Javadoc) * * @see test.check.ConfigurationCommand#invoke(java.lang.Object) */ public void configure(JSlider slider) { slider.setSnapToTicks(false); } } /** * Creates the test panel with sliders. */ public SliderPanel() { this.setLayout(new BorderLayout()); } public synchronized void initialize() { JPanel mainPanel = new ScrollablePanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.setOpaque(false); this.add(new JScrollPane(mainPanel), BorderLayout.CENTER); JPanel horPanel = new JPanel(); BoxLayout horLayout = new BoxLayout(horPanel, BoxLayout.Y_AXIS); horPanel.setLayout(horLayout); JSlider horizontalLTR3 = new JSlider(0, 100, 50); horizontalLTR3.setSnapToTicks(true); horizontalLTR3.setMajorTickSpacing(20); horizontalLTR3.setMinorTickSpacing(5); horPanel.add(horizontalLTR3); JSlider horizontalLTR2 = new JSlider(0, 100, 50); horizontalLTR2.setSnapToTicks(true); horizontalLTR2.setMajorTickSpacing(20); horizontalLTR2.setMinorTickSpacing(5); horizontalLTR2.setPaintTicks(true); horPanel.add(horizontalLTR2); JSlider horizontalLTR1 = new JSlider(0, 100, 50); horizontalLTR1.setSnapToTicks(true); horizontalLTR1.setMajorTickSpacing(20); horizontalLTR1.setMinorTickSpacing(5); horizontalLTR1.setPaintLabels(true); horPanel.add(horizontalLTR1); JSlider horizontalLTR = new JSlider(0, 100, 50); horizontalLTR.setSnapToTicks(true); horizontalLTR.setMajorTickSpacing(20); horizontalLTR.setMinorTickSpacing(5); horizontalLTR.setPaintTicks(true); horizontalLTR.setPaintLabels(true); horPanel.add(horizontalLTR); JSlider disHorizontalLTR3 = new JSlider(0, 100, 50); disHorizontalLTR3.setSnapToTicks(true); disHorizontalLTR3.setMajorTickSpacing(20); disHorizontalLTR3.setMinorTickSpacing(5); disHorizontalLTR3.setEnabled(false); horPanel.add(disHorizontalLTR3); JSlider disHorizontalLTR2 = new JSlider(0, 100, 50); disHorizontalLTR2.setSnapToTicks(true); disHorizontalLTR2.setMajorTickSpacing(20); disHorizontalLTR2.setMinorTickSpacing(5); disHorizontalLTR2.setPaintTicks(true); disHorizontalLTR2.setEnabled(false); horPanel.add(disHorizontalLTR2); JSlider disHorizontalLTR1 = new JSlider(0, 100, 50); disHorizontalLTR1.setSnapToTicks(true); disHorizontalLTR1.setMajorTickSpacing(20); disHorizontalLTR1.setMinorTickSpacing(5); disHorizontalLTR1.setPaintLabels(true); disHorizontalLTR1.setEnabled(false); horPanel.add(disHorizontalLTR1); JSlider disHorizontalLTR = new JSlider(0, 100, 50); disHorizontalLTR.setSnapToTicks(true); disHorizontalLTR.setMajorTickSpacing(20); disHorizontalLTR.setMinorTickSpacing(5); disHorizontalLTR.setPaintTicks(true); disHorizontalLTR.setPaintLabels(true); disHorizontalLTR.setEnabled(false); horPanel.add(disHorizontalLTR); JSlider invertedHorizontalLTR = new JSlider(0, 100, 30); invertedHorizontalLTR.setSnapToTicks(true); invertedHorizontalLTR.setMajorTickSpacing(20); invertedHorizontalLTR.setMinorTickSpacing(5); invertedHorizontalLTR.setPaintTicks(true); invertedHorizontalLTR.setPaintLabels(true); invertedHorizontalLTR.setInverted(true); horPanel.add(invertedHorizontalLTR); JSlider horizontalRTL = new JSlider(0, 100, 50); horizontalRTL.setSnapToTicks(true); horizontalRTL.setMajorTickSpacing(20); horizontalRTL.setMinorTickSpacing(5); horizontalRTL.setPaintTicks(true); horizontalRTL.setPaintLabels(true); horizontalRTL .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); horPanel.add(horizontalRTL); JSlider disHorizontalRTL = new JSlider(0, 100, 50); disHorizontalRTL.setSnapToTicks(true); disHorizontalRTL.setMajorTickSpacing(20); disHorizontalRTL.setMinorTickSpacing(5); disHorizontalRTL.setPaintTicks(true); disHorizontalRTL.setPaintLabels(true); disHorizontalRTL.setEnabled(false); disHorizontalRTL .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); horPanel.add(disHorizontalRTL); JSlider titledHorizontal = new JSlider(0, 100, 50); titledHorizontal.setBorder(BorderFactory.createTitledBorder("Title")); horPanel.add(titledHorizontal); JSlider coloredLabels = getSliderWithColoredLabels(); horPanel.add(coloredLabels); JSlider htmlLabels = getSliderWithHTMLLabels(); horPanel.add(htmlLabels); mainPanel.add(horPanel, BorderLayout.WEST); JPanel verPanel = new JPanel(new FlowLayout()); mainPanel.add(verPanel, BorderLayout.CENTER); JSlider verticalLTR3 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalLTR3.setSnapToTicks(true); verticalLTR3.setMajorTickSpacing(20); verticalLTR3.setMinorTickSpacing(5); // verticalLTR3.setPaintTicks(true); // verticalLTR3.setPaintLabels(true); verPanel.add(verticalLTR3); JSlider verticalLTR1 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalLTR1.setSnapToTicks(true); verticalLTR1.setMajorTickSpacing(20); verticalLTR1.setMinorTickSpacing(5); verticalLTR1.setPaintTicks(true); // verticalLTR1.setPaintLabels(true); verPanel.add(verticalLTR1); JSlider verticalLTR2 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalLTR2.setSnapToTicks(true); verticalLTR2.setMajorTickSpacing(20); verticalLTR2.setMinorTickSpacing(5); // verticalLTR2.setPaintTicks(true); verticalLTR2.setPaintLabels(true); verPanel.add(verticalLTR2); JSlider verticalLTR = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalLTR.setSnapToTicks(true); verticalLTR.setMajorTickSpacing(20); verticalLTR.setMinorTickSpacing(5); verticalLTR.setPaintTicks(true); verticalLTR.setPaintLabels(true); verPanel.add(verticalLTR); JSlider disVerticalLTR = new JSlider(JSlider.VERTICAL, 0, 100, 50); disVerticalLTR.setSnapToTicks(true); disVerticalLTR.setMajorTickSpacing(20); disVerticalLTR.setMinorTickSpacing(5); disVerticalLTR.setPaintTicks(true); disVerticalLTR.setPaintLabels(true); disVerticalLTR.setEnabled(false); verPanel.add(disVerticalLTR); JSlider invertedVerticalLTR = new JSlider(JSlider.VERTICAL, 0, 100, 30); invertedVerticalLTR.setSnapToTicks(true); invertedVerticalLTR.setMajorTickSpacing(20); invertedVerticalLTR.setMinorTickSpacing(5); invertedVerticalLTR.setPaintTicks(true); invertedVerticalLTR.setPaintLabels(true); invertedVerticalLTR.setInverted(true); verPanel.add(invertedVerticalLTR); JSlider verticalRTL3 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalRTL3.setSnapToTicks(true); verticalRTL3.setMajorTickSpacing(20); verticalRTL3.setMinorTickSpacing(5); // verticalRTL3.setPaintTicks(true); // verticalRTL3.setPaintLabels(true); verticalRTL3 .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verPanel.add(verticalRTL3); JSlider verticalRTL1 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalRTL1.setSnapToTicks(true); verticalRTL1.setMajorTickSpacing(20); verticalRTL1.setMinorTickSpacing(5); verticalRTL1.setPaintTicks(true); // verticalRTL1.setPaintLabels(true); verticalRTL1 .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verPanel.add(verticalRTL1); JSlider verticalRTL2 = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalRTL2.setSnapToTicks(true); verticalRTL2.setMajorTickSpacing(20); verticalRTL2.setMinorTickSpacing(5); // verticalRTL2.setPaintTicks(true); verticalRTL2.setPaintLabels(true); verticalRTL2 .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verPanel.add(verticalRTL2); JSlider verticalRTL = new JSlider(JSlider.VERTICAL, 0, 100, 50); verticalRTL.setSnapToTicks(true); verticalRTL.setMajorTickSpacing(20); verticalRTL.setMinorTickSpacing(5); verticalRTL.setPaintTicks(true); verticalRTL.setPaintLabels(true); verticalRTL .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verPanel.add(verticalRTL); JSlider disVerticalRTL = new JSlider(JSlider.VERTICAL, 0, 100, 50); disVerticalRTL.setSnapToTicks(true); disVerticalRTL.setMajorTickSpacing(20); disVerticalRTL.setMinorTickSpacing(5); disVerticalRTL.setPaintTicks(true); disVerticalRTL.setPaintLabels(true); disVerticalRTL.setEnabled(false); disVerticalRTL .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verPanel.add(disVerticalRTL); FormLayout lm = new FormLayout("fill:pref:grow", ""); DefaultFormBuilder builder = new DefaultFormBuilder(lm, new ScrollablePanel()); JButton setTitledBorderButton = new JButton("Set titled border"); setTitledBorderButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { SliderPanel.run(SliderPanel.this, new SetTitleBorderCommand()); } }); } }); JButton clearBorderButton = new JButton("Clear border"); clearBorderButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { SliderPanel.run(SliderPanel.this, new ClearBorderCommand()); } }); } }); JButton snapToTicksButton = new JButton("Snap to ticks"); snapToTicksButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { SliderPanel.run(SliderPanel.this, new SnapToTicksCommand()); } }); } }); JButton unsnapToTicksButton = new JButton("Unsnap to ticks"); unsnapToTicksButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { SliderPanel.run(SliderPanel.this, new UnsnapToTicksCommand()); } }); } }); builder.append(setTitledBorderButton); builder.append(clearBorderButton); builder.append(snapToTicksButton); builder.append(unsnapToTicksButton); this.controlPanel = builder.getPanel(); this.isInitialized = true; } private JSlider getSliderWithColoredLabels() { JSlider coloredLabels = new JSlider(); coloredLabels.setMinimum(0); coloredLabels.setMaximum(2); coloredLabels.setMajorTickSpacing(1); coloredLabels.setPaintLabels(true); Hashtable labels = new Hashtable(); JLabel l0 = new JLabel("Red"); l0.setForeground(new Color(255, 0, 0)); labels.put(new Integer(0), l0); JLabel l1 = new JLabel("Green"); l1.setForeground(new Color(0, 255, 0)); labels.put(new Integer(1), l1); JLabel l2 = new JLabel("Blue"); l2.setForeground(new Color(0, 0, 255)); labels.put(new Integer(2), l2); coloredLabels.setLabelTable(labels); return coloredLabels; } private JSlider getSliderWithHTMLLabels() { JSlider htmlLabels = new JSlider(); htmlLabels.setMinimum(0); htmlLabels.setMaximum(2); htmlLabels.setMajorTickSpacing(1); htmlLabels.setPaintLabels(true); Hashtable labels = new Hashtable(); JLabel l0 = new JLabel( "<html><body>0<br><b>0</b><br><i>0</i></body></html>"); l0.setForeground(new Color(255, 0, 0)); labels.put(new Integer(0), l0); JLabel l1 = new JLabel( "<html><body>1<br><b>1</b><br><i>1</i></body></html>"); labels.put(new Integer(1), l1); JLabel l2 = new JLabel( "<html><body>2<br><b>2</b><br><i>2</i></body></html>"); labels.put(new Integer(2), l2); htmlLabels.setLabelTable(labels); return htmlLabels; } /** * Runs the specified configuration command on all sliders in the specified * component. * * @param comp * Component. * @param command * Configuration command to run. */ public static void run(Component comp, ConfigurationCommand<JSlider> command) { if (comp instanceof JSlider) { command.configure((JSlider) comp); return; } if (comp instanceof Container) { Container cont = (Container) comp; for (int i = 0; i < cont.getComponentCount(); i++) { run(cont.getComponent(i), command); } } } }