witam, chcę zaprogramować zegar ze wskazówkami, mam problem z określeniem współrzędnych x i y punktów na okręgu po którym się poruszają wskazówki zegara, próbuje najpierw zaprogramować wskazówkę sekundową ale mam problem z tym żeby wskazówka poruszała się co sekundę czyli 6 stopni no i zaczynała się poruszać od godziny 12 ale to tylko kwestia właściwej wartości początkowej licznika, chciałem się dowiedzieć czy wzory z których korzystam są poprawne i co źle robię.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingzegarv2;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
*
* @author marcin kaszuba
*/
public class ZegarGui extends JFrame{
private JPanel jPanel = new JPanel();
private GridLayout gridLayout = new GridLayout(1, 1);
private int width = 400;
private int height = 400;
private int pozycja_okna_x = 500;
private int pozycja_okna_y = 200;
private Timer timer;
private double i = 0, x = 0, y = 0;
public ZegarGui(){
setTitle("zegar wskazowkowy !!!");
setLocation(new Point(pozycja_okna_x, pozycja_okna_y));
setPreferredSize(new Dimension(width, height));
pack();
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(jPanel);
jPanel.setLayout(gridLayout);
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
});
timer.start();
}
//@Override
//public void actionPerformed(ActionEvent e) {
//}
@Override
public void paint(Graphics graphics)throws NumberFormatException{
double x2, y2;
x2 = 200 + Math.cos(x++) * 140;
y2 = 200 + Math.sin(y++) * 140;
graphics.fillRoundRect(190, 190, 20, 20, 360, 360);//okrag
graphics.drawRoundRect(50, 50, 300, 300, 360, 360);//srodek
//graphics.drawLine(200, 200, 200, 70);//wskazowka minutowa
//graphics.drawLine(200, 200, 100, 180);//wskazowka godzinowa
graphics.drawLine(200, 200, (int)x2, (int)y2);
}
}
//x = a + cos(alfa) * r
//y = b + sin(alfa) * r
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingzegarv2;
import javax.swing.SwingUtilities;
/**
*
* @author marcin
*/
public class JavaSwingZegarV2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ZegarGui zegarGui = new ZegarGui();
}
});
}
}