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 }