import java.awt.*; import java.beans.*; import utilities.*; public class SineParameters extends NumericDialPanel implements PropertyChangeListener { protected double amplitude, frequency, phase; protected static NDPDialDescriptor[] descs = new NDPDialDescriptor[3]; static { descs[0] = new NDPDialDescriptor("Amplitude", 60, 0.0, 100.0); descs[1] = new NDPDialDescriptor("Frequency", 60, 1.0, 4.0); descs[2] = new NDPDialDescriptor("Phase" , 60); } //------------------------------------------------------------------- // SineParameters Constructor //------------------------------------------------------------------- public SineParameters(double amplitude, double frequency, double phase) { this("Sine Parameters", amplitude, frequency, phase); } public SineParameters(String title, double amplitude, double frequency, double phase) { super(title, descs); this.amplitude = amplitude; this.frequency = frequency; this.phase = phase; setSineParameters(this); addPropertyChangeListener(this); // listen to NumericDialPanel } //------------------------------------------------------------------- // Bulk Setter sets all parameters atomically. //------------------------------------------------------------------- public void setSineParameters(SineParameters params) { amplitude = params.amplitude; frequency = params.frequency; phase = params.phase; dials[0].setValue(amplitude); dials[1].setValue(frequency); dials[2].setValue(phase); } //------------------------------------------------------------------- // Getters allow individual access to each parameter. //------------------------------------------------------------------- public final double getAmplitude() { return amplitude; } public final double getFrequency() { return frequency; } public final double getPhase() { return phase; } //------------------------------------------------------------------- // PropertyChangeListener interface method // A SineParameters object listens to all PC events fired by the underlying // NumericDialPanel. This passes through NumericDial PC events directly. //------------------------------------------------------------------- public void propertyChange(PropertyChangeEvent pcEvent) { String dial = pcEvent.getPropertyName(); double val = ((Double)pcEvent.getNewValue()).doubleValue(); // if ( dial.equals("Amplitude") ) { if ( dial.charAt(0) == 'A' ) { amplitude = val; } else // if ( dial.equals("Frequency") ) { if ( dial.charAt(0) == 'F' ) { frequency = val; } else // if ( dial.equals("Phase") ) { if ( dial.charAt(0) == 'P' ) { phase = val; } else { DebugSupport._assert(false, "PropChange Event from uknown origin! " + dial); } } //------------------------------------------------------------------- // Overridden Object.toString() //------------------------------------------------------------------- public String toString() { return "SineParameters("+amplitude+", "+frequency+", "+phase+")"; } //------------------------------------------------------------------- // SineParameters self-test. //------------------------------------------------------------------- public static void main (String[] args) { Frame window = new Frame("SineParameters Self-Test"); SineParameters sineParams = new SineParameters(50.0, 2.0, 45.0); window.setLayout(new FlowLayout()); window.add(sineParams); window.pack(); window.setVisible(true); } } // End of Class SineParameters