001    package swingui;
002    
003    import java.awt.GridLayout;
004    
005    import javax.swing.JLabel;
006    import javax.swing.JPanel;
007    import javax.swing.JSlider;
008    import javax.swing.event.ChangeEvent;
009    import javax.swing.event.ChangeListener;
010    
011    import components.GameObject;
012    
013    /** DelayPanel is a mutable class that lists to a slider to set the delay property for
014     * a given gizmo.
015     * <p>
016     * Like all the other panels, it starts off in an inactive state. It expects setObject() to
017     * be called; when that happens, it updates with the delay of that particular object. 
018     * <p>
019     * Delays can be set from 0 to 10 seconds. Behavious is unspecified for other values.
020     * <p>
021     * @author ruthdhan
022     */
023    public class DelayPanel extends JPanel implements ChangeListener {      
024            //fields
025            /** the object whose delay we are setting **/
026            private GameObject obj;
027            
028            //components
029            private JSlider delaySlider;
030            
031            /** Create a delay panel with slider initially greyed out **/
032            public DelayPanel() {
033                    super();
034                    
035                //slider for delays
036                JLabel sliderLabel = new JLabel(" Delay: ");
037                delaySlider = new JSlider(JSlider.HORIZONTAL, 0, 10, 0);
038                delaySlider.setMajorTickSpacing(5);
039                delaySlider.setMinorTickSpacing(1);
040                delaySlider.setPaintLabels(true);
041                delaySlider.setPaintTicks(true);
042                delaySlider.addChangeListener(this);
043    
044                add(sliderLabel);
045                add(delaySlider);
046            }
047            
048            /** set the object whose delay we are modifying 
049             * @effects this - sets object & changes UI **/
050            public void setObject(GameObject obj) {
051                    this.obj = obj;
052                    if (obj != null) {
053                            delaySlider.setEnabled(true);
054                            configureDelay();
055                    } else {
056                            delaySlider.setEnabled(false);
057                    }
058            }
059            
060            //selects the correct delay for this object
061            private void configureDelay() {
062                    delaySlider.setValue(obj.getDelay() / 1000);
063            }
064            
065            /** when slider is moved, change delay on selected obj **/
066            public void stateChanged(ChangeEvent e) {
067                    obj.setDelay(delaySlider.getValue() * 1000);
068            }
069            
070            /** the name of this panel, for JTabbedPane **/
071            public String getName() { return "Delay"; }
072    }