import java.awt.*;//Graphics;
import javax.swing.*;//JFrame
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.Date;
public class AquaApplet extends JPanel {
// VARIABLEN
static int fweite = 600;
static int fhoehe = 600;
static int fposx = 300;
static int fposy = 100;
private long timer;
private long elapsedTime;
private Thread t;
double mass(double radius){
double volumen;
volumen = (4/3)*Math.PI*Math.pow(radius, 3);
return volumen;
}
static double r = 2;
Color c9 = new Color(200,100,100);
Rectangle rec = new Rectangle(0,0,fweite-3,fhoehe-32); //Ersten beiden Einträge Startposition im Fenster
/*
//Variante 2 - funktioniert nicht !!! ??????????????????
Dot dots[] = new Dot[3];
for (int n=0;n<dots.length;n++) {
dots[n] = new Dot(new Vector3D(3*n,10,0),new Vector3D(0.1,0.2,0),r,mass(r),Color.BLUE);
}
*/
///*
//Variante 1 - funktioniert aber bei vielen Objekten umständlich!!!
Dot dots [] = new Dot[]{new Dot(new Vector3D(10,10,0),new Vector3D(0.1,0.2,0),r,mass(r),Color.BLUE),
new Dot(new Vector3D(20,20,0),new Vector3D(3.0,2.0,0),r,mass(r),Color.BLUE),
new Dot(new Vector3D(30,30,0),new Vector3D(2.0,2.0,0),r,mass(r),Color.BLUE),
};
//*/
// Interne Klasse Dot
private static class Dot{
private Vector3D p,v;
private double r;
private double m;
private Color color;
public Dot(Vector3D p, Vector3D v, double r, double m, Color color){
this.p=p; //Position
this.v=v; //Geschwindigkeit
this.r=r; //Radius
this.m=m; //Masse
this.color=color; //Farbe
}
public void move(double dt, Rectangle rect){
//check collision with bound-rectangle
if(p.x<rect.x+r){
p.x=rect.x+r; v.x=-v.x;
}else if(p.x>rect.x+rect.width-r){
p.x=rect.x+rect.width-r; v.x=-v.x;
}else if(p.y<rect.y+r){
p.y=rect.y+r; v.y=-v.y;
}else if(p.y>rect.y+rect.height-r){
p.y=rect.y+rect.height-r; v.y=-v.y;
}
}
}
// ------------
public AquaApplet(String newTitel) { // Konstruktormethode
//super.setTitle(newTitel);
}
public void start() { //Hauptmethode hat nichts mit Thread zu tun
timer=System.currentTimeMillis();
t = new Thread(new Runnable(){
public void run(){
while(true){
//Laufzeit
elapsedTime=-timer+(timer=System.currentTimeMillis());
//Punkte
try{
Thread.sleep(1); //default = 5
repaint();
} catch(InterruptedException e){;}
}
}
}
);
t.start();
}
//----------------------------------------------------------------------
//MAIN-METHODE
public static void main(String str[]) { //MAIN
JFrame fenster = new JFrame("AquaApplet"); //JFrame-Hauptobjekt
fenster.setSize(fweite, fhoehe);
fenster.setLocation(fposx,fposy);
fenster.setResizable( false );
fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); //beendet das Programm beim schließen des Fensters
//Hinzufügen eines Labels
UIDefaults uiDefaults = UIManager.getDefaults();
uiDefaults.put( "Label.font",((Font)uiDefaults.get("Label.font")).deriveFont(15f) );
AquaApplet kb = new AquaApplet("");
kb.setBackground(Color.WHITE); //setzt die Hintergrundfarbe
fenster.getContentPane().add(kb); //Inhalt von kb wird in den fenster-Container übergeben
//setze Fenster sichtbar
fenster.setVisible(true);
kb.start(); //Hauptmethode wird ausgeführt
}
//----------------------------------------------------------------------
//PAINTMETHODE
public void paintComponent(Graphics g) { //Paintmethode
super.paintComponent(g);
for(int i=0; i<dots.length; i++){
g.setColor(dots[i].color);
g.drawLine((int)(dots[i].p.x),(int)(dots[i].p.y),(int)(dots[i].p.x),(int)(dots[i].p.y));
}
}
}