# Uhrzeiger



## Franky-2012 (17. Jan 2013)

Hallo,

Ich wollte mir mit java mal eine Uhr, mit graphischer Oberfläche, programmieren .
Aber das mit den Zeigern funzt nicht ganz.... also das die sich richtig drehen lassen ;(
Bei mir sind die immer sonst woo , wenn ich es mit rotate versuche ;(
Habe versucht sie mit g.rotate(Math.toRadians());
zu rotieren und dann wieder an die richtige Stelle zu bringen, mit AffineTransformation 
translate.
Aber es klappt nicht 
Hier mal ein Beispeil Code :
Ist halt ein Beispiel 

```
import javax.swing .*;

import java.awt.*;

public class Beispiel extends JComponent {

   private int value;
   private Point position;

  public Beispiel(Point point) {    // Konstruktor
	  
    position = point;
 
  }
  
 private void drawLine(final Graphics2D g){

	g.fillOval(position.x, position.y, 10, 10);
	g.drawLine(position.x + 5, position.y, position.x, position.y - 90);
	
 }
 
 
 protected void paintComponent(Graphics g) {
	 
	 Graphics2D g2d = (Graphics2D) g;
	 drawLine(g2d);
 }

 public static void showGui() {
		JFrame f = new JFrame();
		f.setSize(500, 500);
		f.setLayout(new BorderLayout());
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new Beispiel(new Point(250, 250)));
		f.setVisible(true);
	}
	
 public static void main (final String [] args) {
	final Runnable run = new Runnable(){
		public void run() {
		showGui();	
		}
	};
	SwingUtilities.invokeLater(run);
	
	}
}
```
wie kann ich den "Zeiger" korrekt rotieren ??
In meinem "Orgina Code" habe ich halt noch mehr Methoden zum zeichnen des Hintergrundes, der Ränder etc....


----------



## bERt0r (17. Jan 2013)

Rotate von AffineTransform existiert in mehreren Ausführungen. Die hier z.B lässt dir einen "Ankerpunkt" angeben, um die sich das ganze drehen soll.


----------



## asdfghjl (17. Jan 2013)

Das Graphics Objekt mittels translate(x, y) auf den Mittelpunkt der Uhr setzen, danach mittels rotate(radian) in die gewünschte Richtung drehen und anschließend eine Linie von (0, 0) bis (x, 0) zeichnen.


----------



## Melfis (17. Jan 2013)

Hatte mal in einem anderen Kontext sowas als KSBK in einem Thread gepostet.

MFG Melfis


----------



## Franky-2012 (18. Jan 2013)

So Dankee erstmal für eure Aw's!!
Aber so ganz funzt es nicht 
Mit einem Zeiger funzt es, aber ich habe auch noch 2 andere und bei denen funzt es nicht....
Hier mal der Code von den Methoden mit denen ich die Zeiger zeichne 

```
private void drawMinTick(final Graphics2D g) {    // zeichnet den Minutenzeiger
	
	//zeichne den zeiger
	g.setStroke(new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
	g.translate(middlePoint.x, middlePoint.y);
	g.rotate(Math.toRadians(50));
	g.drawLine(2, 4, middlePoint.x - 140, 0);
}



private void drawSecTick(final Graphics2D g) {    // zeichne den Secundenzeiger
	
	//zeichne den zeiger
	g.setColor(Color.RED);
	g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
	g.translate(middlePoint.x +3 , middlePoint.y +3);
	g.rotate(Math.toRadians(30));
	g.drawLine(2, 4, middlePoint.x - 140, 0);
	
}

private void drawTick(final Graphics2D g2d) {
	
	drawHourTick(g2d);
	drawMinTick(g2d);
	drawSecTick(g2d);
}
```
Irgendwie beinflussen sich die Methoden.
Vlt findet ihr ja den Fehler !!


> Rotate von AffineTransform existiert in mehreren Ausführungen. Die hier z.B lässt dir einen "Ankerpunkt" angeben, um die sich das ganze drehen soll.


 Dankee es funzt!! aber halt nur mit einem Zeiger!!


----------

