/*
* Datei: SchiebeRegler.java
* Autor(en): Lukas K�nig
* Java-Version: 1.4
* Erstellt (vor): 14.05.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.graphVis;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import fmg.fmg8.statistik.Parametersatz;
/**
* Klasse zur Implementierung eines Schiebereglers in einem Fenster.
*
* @author Lukas K�nig
*/
public class Taktgeber extends JFrame {
/**
* UID.
*/
private static final long serialVersionUID = -3011096274257550863L;
/**
* Der Schieberegler.
*/
private JScrollBar sb;
/**
* Der Wert des Schiebereglers.
*/
private long value;
/**
* Die Parameter.
*/
private Parametersatz pars;
/**
* Ausgabefeld f�r den aktuellen Wert des Reglers.
*/
private Label wertAusg;
/**
* Der Konstruktor.
*
* @param params Die Parameter.
* @param eltern Das aufrufende Fenster.
*/
public Taktgeber(final Parametersatz params,
final Frame eltern) {
super("Taktgeber");
this.pars = params;
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Container c = this.getContentPane();
c.setLayout(new GridLayout(2, 1));
Container c2 = new Container();
Label l1, l2, l3;
c2.setLayout(new GridLayout(1, 3));
l1 = new Label("SLOW");
l2 = new Label("0");
l2.setAlignment(Label.CENTER);
l3 = new Label("FAST");
l3.setAlignment(Label.RIGHT);
c2.add(l1);
c2.add(l2);
c2.add(l3);
this.add(c2);
this.wertAusg = l2;
this.setBounds(eltern.getX(),
eltern.getY() + eltern.getHeight() + 20,
0,
0);
this.setMaximumSize(new Dimension(eltern.getWidth(), 50));
this.setMinimumSize(this.getMaximumSize());
this.setResizable(false);
c.setCursor(new Cursor(Cursor.HAND_CURSOR));
this.sb = new JScrollBar(JScrollBar.HORIZONTAL,
0,
0,
0,
50);
c.add(sb);
sb.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(final AdjustmentEvent e) {
Taktgeber.this.value = e.getValue();
Taktgeber.this.pars.setVerzoegerung(
Taktgeber.this.verzBerechnung());
Taktgeber.this.wertAusg.setText("" + e.getValue());
}
});
this.pars.setVerzoegerung(this.verzBerechnung());
this.pack();
this.setVisible(true);
}
/**
* Berechnet die Verz�gerung aus dem Wert des Schiebereglers.
*
* @return Verz�gerung.
*/
private long verzBerechnung() {
double verz;
double x = this.sb.getValue();
double a = 2001;
double b = Math.pow(1.0 / 2001.0, 1.0 / 50.0);
// verz = 1.6328205114807626E-6 * x * x * x * x * x
// - 51.02564098377383 * x
// + 2041.0256393509533;
verz = a * Math.pow(b, x);
if (verz >= 2000) {
verz = Long.MAX_VALUE;
}
return (long) verz;
}
/**
* @return Returns the value.
*/
public long getValue() {
return this.value;
}
}