package lab7;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JPanel;
import javax.swing.Timer;
public class MyPanel extends JPanel {
Timer t;
public MyPanel()
{
t = new Timer(100, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
MyPanel.this.repaint();
}});
t.start();
}
public void paint(Graphics g){
super.paint(g);
int mx = this.getWidth()/2;
int my = this.getHeight()/2;
int r;
if (mx<my)
r=mx;
else
r=my;
int m =10;
r=r-m;
g.setColor(Color.LIGHT_GRAY);
g.fillOval(mx-r, my-r, 2*r, 2*r);
g.setColor(Color.BLACK);
g.drawOval(mx-r,my-r,2*r,2*r);
g.fillOval(mx-5, my-5, 10, 10);
Calendar c= Calendar.getInstance();
int sec = c.get(Calendar.SECOND);
int min = c.get(Calendar.MINUTE);
int ho = c.getMaximum(Calendar.HOUR);
float alfa = sec*6-90;
float ralfa = (float) (alfa*Math.PI/180.0);
int xk = (int) (mx+r*Math.cos(ralfa));
int yk = (int) (mx+r*Math.sin(ralfa));
g.drawLine(mx, my, xk, yk);
Graphics2D g2d = (Graphics2D)g;
g2d.setStroke(new BasicStroke(3));
float alfa2 = min*6-90;
float ralfa2 = (float) (alfa2*Math.PI/180.0);
int xkk = (int) (mx+r*Math.cos(ralfa2));
int ykk = (int) (mx+r*Math.sin(ralfa2));
g2d.drawLine(xkk, ykk, mx, my);
float alfa3 = ho*30-90;
float ralfa3 = (float) (alfa3*Math.PI/180.0);
int xkkk = (int) (mx+r*Math.cos(ralfa3));
int ykkk = (int) (mx+r*Math.sin(ralfa3));
Graphics2D g3d = (Graphics2D)g;
g3d.setStroke(new BasicStroke(6));
g3d.drawLine(xkkk, ykkk, mx, my);
}
}
Tak jak w temacie. Chciałbym żeby wskazówki zarówno minutowa jak i godzinowa przez cały czas "płynęły", a nie wykonywały jeden skok, minutowa odpowiednio kiedy minie 60 sekund, a godzinowa kiedy minie 60 minut. Dodatkowe pytanie, czemu wskazówka godzinowa nie działa tak jak powinna?