import java.applet.*; import java.awt.*; import java.awt.event.*; public class welle3 extends Applet { int Start=1; Button f1 = new Button("Stop"); Scrollbar Frequenz = new Scrollbar(Scrollbar.HORIZONTAL,6,1,1,31); Scrollbar Anzahl = new Scrollbar(Scrollbar.HORIZONTAL,1,1,1,10); double omega=0.6; //Gibt Frequenz an double anzahl=1; //Gibt Anzahl der Erreger an boolean anhalten; painter canvas; //initialisiert Zeichenflaeche wellen wellen1; wellen wellen2; wellen wellen3; wellen wellen4; wellen wellen5; wellen wellen6; Zeiger zeiger1; Panel raster = new Panel(); Label s1 = new Label("Frequenz",Label.RIGHT); Label s2 = new Label("0.6"); Label s3 = new Label("Anzahl der Erreger",Label.RIGHT); Label s4 = new Label("1"); double sb1value=0; //Scrollbarvariable double sb2value=0; //Scrollbarvariable double t=0.0; double t_neu=0.0; int[] x = new int[10]; int[] y = new int[10]; final double pi=3.14; public welle3() { canvas = new painter(); canvas.setForeground(Color.black); canvas.setBackground(Color.white); canvas.setSize(630,300); setLayout(new FlowLayout()); add(canvas); Label info1 = new Label("(c) 1998 by Jörg Bogendörfer",Label.LEFT); Label info2 = new Label("Didaktik der Physik, Uni Erlangen ",Label.RIGHT); info1.setForeground(Color.white); info2.setForeground(Color.white); raster.setLayout(new GridLayout(4,3,10,5)); raster.setForeground(Color.black); raster.setBackground(Color.white); raster.add(s1); raster.add(Frequenz); raster.add(s2); raster.add(s3); raster.add(Anzahl); raster.add(s4); raster.add(info1); raster.add(f1); raster.add(info2); add(raster); Frequenz.addAdjustmentListener(new Scrolling()); Anzahl.addAdjustmentListener(new Scrolling()); f1.addActionListener(new Akt()); } public static void main(String[] args) { Frame fenster = new Frame("Zur Wellenfunktion");; class adapt extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } fenster.addWindowListener(new adapt()); welle3 test = new welle3(); test.init(); test.start(); fenster.add(test); fenster.setBackground(Color.white); fenster.setForeground(Color.black); fenster.setBounds(100,80,670,450); fenster.setResizable(false); fenster.show(); } //Ende von main public void init() { wellen1 = new wellen(canvas); zeiger1 = new Zeiger(canvas,0); wellen1.beenden = false; zeiger1.beenden = false; wellen1.anhalten = true; zeiger1.anhalten = true; wellen1.start(); zeiger1.start(); } // Ende von init public void start() { synchronized(wellen1) { wellen1.anhalten = false; try { wellen1.notify(); } catch(Exception e){} } synchronized(zeiger1) { zeiger1.anhalten = false; try { zeiger1.notify(); } catch(Exception e){} } } // Ende von Start public void stop() { if(wellen1 != null && zeiger1 != null) { wellen1.anhalten = true; zeiger1.anhalten = true; } } public void destroy() { if(wellen1 != null && zeiger1 != null) { wellen1.anhalten = true; zeiger1.anhalten = true; } } class Akt implements ActionListener { public void actionPerformed(ActionEvent e) { String Label; Label = e.getActionCommand(); if(Label.equals("Start")) { Start=1; f1.setLabel("Stop"); omega=Frequenz.getValue()/10.0; wellen1.resume(); zeiger1.resume(); } if(Label.equals("Stop")) { Start=0; f1.setLabel("Start"); wellen1.suspend(); zeiger1.suspend(); } } } //Ende von Actionlistener class Scrolling implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent e) { sb1value=Frequenz.getValue(); sb2value=Anzahl.getValue(); omega=sb1value/10.0; anzahl=sb2value; double s2value = omega; int s4value = (int) anzahl; s2.setText("" + sb1value/10.0); s4.setText("" + s4value); zeiger1.resume(); wellen6.resume(); Start=1; f1.setLabel("Stop"); canvas.repaint(); } } class wellen extends Thread { boolean anhalten,beenden; //Statusvariablen painter bild; double dt = 0.002; int x1=500; int y1=120; wellen(painter c) //Konstruktor anlegen { bild=c; } public void run() //run Methode fuer die Threads { while(beenden==false) { Bewegen(); //Ein Stueckchen drehen synchronized(this) { try { sleep(20); if(anhalten==true) { wait(); } } catch(InterruptedException e) {return;} } } } void Bewegen() { //double t_neu; Graphics g = bild.getGraphics(); int l=0; g.setColor(Color.white); g.fillRect(328,240,100,100); g.fillRect(5,5,350,280); g.fillRect(432,51,133,133); g.setColor(Color.black); g.drawLine(37,34,37,264); g.drawLine(37,264,450,264); g.fillOval(35,262,5,5); g.fillOval(348,262,5,5); t_neu=t+dt; g.setColor(Color.black); g.fillOval(348,262,5,5); double k=0.0; for(k=0.0; k<=anzahl-1; k++) { int i = (int) k; if(i==0) { x1=500; y1=120; } x[i]=(int) (20*(Math.cos((t_neu*2*pi*omega)+((k/10.0)*2*pi)))); y[i]=(int) (-20*(Math.sin((t_neu*2*pi*omega)+((k/10.0)*2*pi)))); g.setColor(Color.black); g.fillOval(35,262-25*i,5,5); g.fillOval(498,118,5,5); if(i>=1) { g.setColor(new Color(180,180,180)); g.drawLine(37,264-25*i,350,264); } g.setColor(Color.black); g.fillOval(35,262-25*i,5,5); g.setColor(Color.white); g.fillRect(330,244,20,20); g.setColor(new Color(255-(i*25),i*25,i*25)); g.drawLine(350,264,350+x[i],262+y[i]); g.drawLine(37,264-25*i,37+x[0],264-(25*i)+y[0]); g.drawLine(x1,y1,x1+x[i],y1+y[i]); if(i==anzahl-1) { g.setColor(Color.black); g.drawLine(x1+x[i],y1+y[i],500,120); } x1=x1+x[i]; y1=y1+y[i]; } t=t_neu; g.dispose(); } //Ende von draw } //Ende der Klasse wellen class painter extends Canvas { public void paint(Graphics g) { g.setColor(Color.black); g.drawLine(0,0,629,0); g.drawLine(629,0,629,299); g.drawLine(629,299,0,299); g.drawLine(0,299,0,0); g.drawLine(37,34,37,264); g.drawLine(37,264,450,264); g.fillOval(35,262,5,5); g.fillOval(348,262,5,5); g.drawRect(431,50,135,135); } //Ende von Paint } // Ende von painter class Zeiger extends Thread { boolean anhalten,beenden; //Statusvariablen painter bild; double dt = 0.002; int i=0; Zeiger(painter c, int k) //Konstruktor anlegen { bild=c; i=k; } public void run() //run Methode fuer die Threads { while(beenden==false) { Bewegen(); //Ein Stueckchen drehen synchronized(this) { try { sleep(20); if(anhalten==true) { wait(); } } catch(InterruptedException e) {return;} } } } void Bewegen() { int x,y; Graphics g = bild.getGraphics(); g.setColor(Color.white); g.fillRect(315,25,65,65); int laenge=1; x=(int) (30*(Math.cos((t_neu*2*pi*omega)+(30)/laenge*2*pi))); y=(int) (-30*(Math.sin((t_neu*2*pi*omega)+(30)/laenge*2*pi))); g.setColor(Color.black); g.fillOval(343,53,5,5); g.setColor(Color.blue); g.drawLine(345,55,345+x,55+y); g.setColor(Color.red); g.drawLine(345,55,345,55+y); g.setColor(Color.darkGray); g.drawLine(345,55+y,345+x,55+y); g.dispose(); } //Ende von draw } //Ende der Klasse Zeiger } //Ende von welle1