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 }