Uhrzeiger

Franky-2012

Mitglied
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 :D
Java:
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

Top Contributor
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.
 
A

asdfghjl

Gast
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.
 

Franky-2012

Mitglied
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 ;)
Java:
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!!
 

Neue Themen


Oben