Applet: Zegar analogowy

5 05 2008

import java.applet.*;
import java.awt.*;
import java.util.*;

/*<APPLET CODE=”Zegar.java” WIDTH=300 HEIGHT=300></APPLET>*/
public class Zegar extends Applet implements Runnable {
int sizeX, sizeY, Cx, Cy, r;
Color clockColor;
boolean stopped;
double hour, minute, second;
Graphics mDC, gDC;
Image img;

@Override
public void init() {
sizeX= getSize().width;
sizeY=getSize().height;

img= createImage(sizeX, sizeY);
mDC= img.getGraphics();
gDC= getGraphics();

Cx= (sizeX / 2);
Cy= (sizeY / 2);

if(sizeX < sizeY) {
sizeY=sizeX;
}
else if(sizeX > sizeY) {
sizeX=sizeY;
}

r= (sizeX / 2);
clockColor= Color.yellow;
}

@Override
public void start() {
stopped= false;
Thread thread= new Thread(this);
thread.start();
}

public void run() {
while(!stopped) {
draw();
try {
Thread.sleep(1000);
}
catch(InterruptedException e) {

}
}
}

@Override
public void stop() {
stopped= true;
}

@Override
public void paint(Graphics gDC) {
draw();
}

public void draw() {
getTime();

mDC.setColor(Color.white);
mDC.fillRect(0, 0, getSize().width, getSize().height);
mDC.setColor(clockColor);
mDC.fillOval(Cx - sizeX / 2, Cy - sizeY / 2, sizeX, sizeY);

drawDigits(mDC);
drawHands(mDC);

gDC.drawImage(img,0,0,null);
}

public void drawDigits(Graphics gDC) {
gDC.setColor(Color.black);

for(int i= 1; i<=12; i++) {
int digitWidth= gDC.getFontMetrics().stringWidth(Integer.toString(i));
int digitHeight= gDC.getFontMetrics().getHeight();
int x= (int)(Cx + (r- digitHeight)*Math.cos(Math.PI / 6 * (i-3)));
int y= (int)(Cy + (r- digitHeight)*Math.sin(Math.PI / 6 * (i-3)));
x -= digitWidth / 2;
y += digitHeight / 2;
gDC.drawString(Integer.toString(i),x,y);
}
}

public void drawHands(Graphics gDC) {
double hVal= hour*60+minute;

int xH=(int)(Cx+(r*0.6)*Math.cos(Math.PI/360*(hVal-180)));
int yH=(int)(Cy+(r*0.6)*Math.sin(Math.PI/360*(hVal-180)));

int xM=(int)(Cx+(r*0.65)*Math.cos(Math.PI/30*(minute-15)));
int yM=(int)(Cy+(r*0.65)*Math.sin(Math.PI/30*(minute-15)));

int xS=(int)(Cx+(r*0.7)*Math.cos(Math.PI/30*(second-15)));
int yS=(int)(Cy+(r*0.7)*Math.sin(Math.PI/30*(second-15)));

gDC.setColor(Color.red);
gDC.drawLine(Cx,Cy,xH,yH);
gDC.drawLine(Cx-1, Cy-1, xH, yH);
gDC.drawLine(Cx+1, Cy+1, xH, yH);

gDC.setColor(Color.green);
gDC.drawLine(Cx,Cy,xM,yM);
gDC.drawLine(Cx-1, Cy-1, xM, yM);
gDC.drawLine(Cx+1, Cy+1, xM, yM);

gDC.setColor(Color.blue);
gDC.drawLine(Cx, Cy, xS, yS);
}

public void getTime() {
GregorianCalendar calendar= new GregorianCalendar();
hour= calendar.get(Calendar.HOUR);
minute= calendar.get(Calendar.MINUTE);
second= calendar.get(Calendar.SECOND);
}
}


Operacje

Informacja

Dodaj komentarz

Możesz użyć tych tagów : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>