# Uhr mit Pendel



## mave (13. Mrz 2007)

Hallo!
Ich habe ein Applet geschrieben in dem ein Borderlayout in 3 Bereiche aufgeteilt ist. Im EAST-Bereich kann man 3 Termine eingeben, die Uhrzeit einstellen, etc.; im CENTER-Bereich zeichnet eine Paint-Component eine analoge Uhr mit Pendel. 
Mein Problem dabei liegt, das ich den Thread für das Pendel geschrieben hab und auch Methoden um die x,y Werte zu bekommen, doch will sich das blöde Pendel nicht bewegen. 
Die Uhr funktioniert hingegen, hab sie aus der java.util.date. Außer dass ich nicht weiß wie ich die Werte ändern kann um die Uhrzeit umzustellen.
Also hoffe ich dass ihr mir hier helfen könnt.
Danke!

Hier die Java-Codes der beiden Klassen:

Java-Code GUI:


```
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;

public class gui extends JApplet implements ActionListener{

	private JButton termin1;
	private JButton termin2;
	private JButton termin3;

	private JButton uhrstellen;


	private JTextField uhrzeit_stellen;

	private JTextField uhrzeit_eintragen;

//	private JTextField terminbeschreibung;
	private JTextArea terminbeschreibung;

	private JLabel zeit1;
	private JLabel zeit2;
	private JLabel zeit3;

	private JLabel termin1t;
	private JLabel termin2t;
	private JLabel termin3t;

	private JLabel termin1b;
	private JLabel termin2b;
	private JLabel termin3b;

	private JLabel termin1z;
	private JLabel termin2z;
	private JLabel termin3z;

	private JLabel abstand;

	private JLabel terminanzeige;

	private JPanel rechts;

	private Datum uhr;

	public gui(){}

	public void init(){

		termin1 = new JButton("Als Termin 1 eintragen");
		termin2 = new JButton("Als Termin 2 eintragen");
		termin3 = new JButton("Als Termin 3 eintragen");

		uhrstellen = new JButton("Uhrzeit setzen");

		uhrzeit_stellen = new JTextField("hh:mm:ss");

		uhrzeit_eintragen = new JTextField("hh:mm:ss");

	//	terminbeschreibung = new JTextField("Terminbeschreibung",20); // später als TextArea!
		terminbeschreibung = new JTextArea(4,15);



		termin1t = new JLabel("Termin 1:");
		termin2t = new JLabel("Termin 2:");
		termin3t = new JLabel("Termin 3:");

		termin1z = new JLabel("[Zeit]");
		termin2z = new JLabel("[Zeit]");
		termin3z = new JLabel("[Zeit]");

		termin1b = new JLabel("Noch kein Eintrag vorhanden");
		termin2b = new JLabel("Noch kein Eintrag vorhanden");
		termin3b = new JLabel("Noch kein Eintrag vorhanden");

		terminanzeige = new JLabel("Noch [Zeit] bis [Termin1/2/3]", JLabel.CENTER);

		abstand = new JLabel("");

		rechts = new JPanel();
		rechts.setLayout(new GridLayout(21,1));

		rechts.add(termin1t);
		rechts.add(termin1z);
		rechts.add(termin1b);
		rechts.add(abstand);
		rechts.add(termin2t);
		rechts.add(termin2z);
		rechts.add(termin2b);
		rechts.add(abstand);
		rechts.add(termin3t);
		rechts.add(termin3z);
		rechts.add(termin3b);
		rechts.add(abstand);
		rechts.add(terminbeschreibung);
		rechts.add(uhrzeit_eintragen);
		rechts.add(abstand);
		rechts.add(termin1);
		rechts.add(termin2);
		rechts.add(termin3);
		rechts.add(abstand);
		rechts.add(uhrzeit_stellen);
		rechts.add(uhrstellen);

		uhr=new Datum();

		Container c = getContentPane();

		c.setLayout(new BorderLayout());

		c.add(rechts, BorderLayout.EAST);
		c.add(terminanzeige, BorderLayout.SOUTH);
		c.add(uhr, BorderLayout.CENTER);

		termin1.addActionListener(this);
		termin2.addActionListener(this);
		termin3.addActionListener(this);

	}//init

	public void actionPerformed(ActionEvent e){

		if(e.getSource()==termin1){
			termin1b.setText(terminbeschreibung.getText());
			termin1z.setText(uhrzeit_eintragen.getText());
		} //if
		if(e.getSource()==termin2){
			termin2b.setText(terminbeschreibung.getText());
			termin2z.setText(uhrzeit_eintragen.getText());
		} //if
		if(e.getSource()==termin3){
			termin3b.setText(terminbeschreibung.getText());
			termin3z.setText(uhrzeit_eintragen.getText());
		} //if
	}//actionPerformed
}//GUI
```


Java-Code Uhr/Datum


```
import java.awt.*;
import java.applet.*;
import java.util.*;
import javax.swing.*;


public class Datum extends JPanel implements Runnable
{
	public Datum(){}

	int wid;
	int heig;
	int heig1;
	int x;
	int y;

	public Calendar date;



	public void paintComponent(Graphics g){
		date = new GregorianCalendar();

   int h = date.get(Calendar.HOUR_OF_DAY);
   int m = date.get(Calendar.MINUTE);
   int s = date.get(Calendar.SECOND);

		wid=this.getSize().width;
		heig=this.getSize().height;
		heig1=heig/3*2;

		repaint();
		revalidate();

		getxy(wid,heig);

		zeichnenAnalog(g,h,m,s);
		g.drawLine(wid/2,heig1/2+105,x,y);
		g.fillOval(x,y,16,16);
	}
    public static int nn;


    public static int mm;


    public static int r=100;

		private Thread runner = null;

	public void getxy(int wid, int heig)
	{
		x=wid/2;
		y=heig1/2+300;
	}

	public void init()
	{
	}
	public void start()
	{

		if(runner == null)
			{	runner = new Thread(this);
				runner.start();
			}

	}

	public void stop()
	{
		if(runner!=null)
			runner=null;
	}

	public void destroy()
	{
	}


	public void run()
	{
		while(runner==Thread.currentThread())
		{

			try{ Thread.currentThread().sleep(1000);
				 }catch(InterruptedException e){}
			x++;
			y++;
			repaint();

		}

		}




    public void zeichnenAnalog(Graphics g,int h,int m,int s){

		nn=wid/2;
   	mm=heig1/2;
    g.setColor(Color.black);
    g.fillRect(0,0,wid, heig);
    g.setColor(Color.red);
    g.drawOval(nn-2,mm-2,4,4);

    // Striche bei 3, 6, 9 und 12 Uhr
    for (int i=0;i<4;i++) {
      g.drawLine(
      nn+(int)((r-7)*Math.cos(Math.toRadians(90*i))),
      mm+(int)((r-7)*Math.sin(Math.toRadians(90*i))),
      nn+(int)(r*Math.cos(Math.toRadians(90*i))),
      mm+(int)(r*Math.sin(Math.toRadians(90*i))));
    }
    // Striche bei jeder Stunde
    for (int i=0;i<12;i++) {
      g.drawLine(
      nn+(int)((r-5)*Math.cos(Math.toRadians(30*i))),
      mm+(int)((r-5)*Math.sin(Math.toRadians(30*i))),
      nn+(int)(r*Math.cos(Math.toRadians(30*i))),
      mm+(int)(r*Math.sin(Math.toRadians(30*i))));
    }
    //Striche bei jeder Minute
    for (int i=0;i<60;i++) {
      g.drawLine(
      nn+(int)((r-2)*Math.cos(Math.toRadians(6*i))),
      mm+(int)((r-2)*Math.sin(Math.toRadians(6*i))),
      nn+(int)(r*Math.cos(Math.toRadians(6*i))),
      mm+(int)(r*Math.sin(Math.toRadians(6*i))));
    }

    // Stundenzeiger
    g.drawLine(
	    nn,mm,nn+(int)(60*Math.cos(Math.toRadians(h%12*30+m/2.0-90))),
	    mm+(int)(60*Math.sin(Math.toRadians(h%12*30+m/2.0-90))));

    // Minutenzeiger
    g.drawLine(
      nn,mm,nn+(int)(85*Math.cos(Math.toRadians(m*6-90))),
      mm+(int)(85*Math.sin(Math.toRadians(m*6-90))));

    // Sekundenzeiger
    g.drawLine(
      nn,mm,nn+(int)(90*Math.cos(Math.toRadians(s*6-90))),
      mm+(int)(90*Math.sin(Math.toRadians(s*6-90))));

      repaint();

    }

}
```


_L-ectron-X hat diesen Beitrag am 13.03.2007 um 11:29 Uhr editiert.
Code-Tags eingefügt._


----------



## Wildcard (13. Mrz 2007)

So wie dach das sehe machst du mit deiner 'uhr' gar nichts.
Ruf mal uhr.start() auf.


----------



## mave (13. Mrz 2007)

die uhr läuft ohne probleme... das wär ja nicht das problem


----------

