csharp_pain/Solar system/sss3d-source/sss3d/gui/SmallInfoPanel.java

175 lines
4.4 KiB
Java
Raw Permalink Normal View History

2014-06-26 15:13:46 +00:00
/*
File: SmallInfoPanel.java
University of Applied Science Berne,HTA-Biel/Bienne,
Computer Science Department.
Diploma thesis J3D Solar System Simulator
Originally written by Marcel Portner & Bernhard Hari (c) 2000
CVS - Information :
$Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/SmallInfoPanel.java,v 1.6 2000/12/13 13:45:56 portm Exp $
$Author: portm $
$Date: 2000/12/13 13:45:56 $
$State: Exp $
*/
package sss3d.gui;
import sss3d.utils.SSS3dConstants;
import sss3d.calculations.TimeCalc;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.event.*;
/**
* Shows a small info panel at the bottom of the solar system simulator
*
* @author Marcel Portner & Bernhard Hari
* @version $Revision: 1.6 $
*/
public class SmallInfoPanel extends JPanel implements Runnable {
private static final int DIGITSAFTERCOMA = 4;
private JLabel navigation, factor, date;
private boolean mode = true;
private double julianDate;
private double dateStep;
private Thread thread;
private boolean runDate = true;
private TimeCalc timeCalc;
/**
* Creates a small info panel
*/
public SmallInfoPanel() {
super();
timeCalc = new TimeCalc();
// create GUI
setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 0));
navigation = new JLabel("Move");
this.add(navigation);
date = new JLabel("Date:");
this.add(date);
factor = new JLabel("Step Factor: F3");
this.add(factor);
this.setVisible(true);
thread = new Thread(this, "InfoPanel");
thread.start();
}
/**
* Sets the navigation mode to Turn or Move
*/
public void setNavigationMode() {
if(mode) {
navigation.setText("Turn");
} else {
navigation.setText("Move");
}
mode = !mode;
}
/**
* Sets the step factor to F1/ F2/ F3 or F4
*
* @param stepFactor the new step factor
*/
public void setFactor(int stepFactor) {
if(stepFactor == 1) {
factor.setText("Step Factor: F1");
} else if(stepFactor == 2) {
factor.setText("Step Factor: F2");
} else if(stepFactor == 3) {
factor.setText("Step Factor: F3");
} else if(stepFactor == 4) {
factor.setText("Step Factor: F4");
}
}
/**
* Sets the gregorian date an julian date.
*
* @param julianDate the new date
*/
public void setDate(double julianDate) {
this.julianDate = julianDate;
int gregorianDate [] = timeCalc.calDat(julianDate - 2400001.0);
String text = new String("Date: ");
if( gregorianDate[2] < 10 ) text += "0";
text += gregorianDate[2] + ". "; // day
if( gregorianDate[1] < 10 ) text += "0";
text += gregorianDate[1] + ". "; // month
text += gregorianDate[0] + " "; // year
if( gregorianDate[3] < 10 ) text += "0";
text += gregorianDate[3] + ":"; // hour
if( gregorianDate[4] < 10 ) text += "0";
text += gregorianDate[4] + " "; // minute
// not necessary - time calc returns always 0 for second
/*if( gregorianDate[5] < 10 ) text += "0";
text += gregorianDate[5] + " "; // second
*/
String jdate = " JD: ";
jdate += Double.toString(julianDate);
int pos = jdate.indexOf(".");
if(jdate.length() - pos > DIGITSAFTERCOMA) {
text += jdate.substring(0, pos + DIGITSAFTERCOMA);
} else {
text += jdate;
}
date.setText(text);
}
/**
* Sets increasing time step.
*
* @param step - the time step
*/
public void setStep(double step) {
dateStep = step;
}
/**
* Stops the date display from updating
*/
public void stopDate() {
runDate = false;
}
/**
* Starts the date display to update itself
*/
public void startDate() {
runDate = true;
}
/**
* Run method. Updates the date after an elapsed time frame.
*/
public void run() {
while(true) {
if(runDate) {
try {
Thread.sleep(100);
} catch(InterruptedException ie) { }
julianDate += dateStep / 10;
setDate(julianDate);
}
}
}
}