Nu siger du at du gerne vil have et ur, og gerne vil lære java, og jeg kan derfor ikke dy mig for at poste følgende lille program fundet på:
http://www.gamedev.net/hosted/javaextreme/obfpoll.htmDet er ikke nogen JFrame, da forfatteren mener at det ville overskride de tilladte 1024 bytes maxgrænse i konkurrencen at skulle importere javax.swing. Jeg har dog uden større besvær kunne finde et par småting i programmet der kunne skæres væk uden konsekvenser og derved skabe plads til ærklæringen :-) så her kunne også være en lille øvelse og en lidt bagvendt måde at lære lidt java.
Programmet skal selvfølgelig gemmes i en fil der hedder C.java.
(og, ja, det er meningen at det skal stå på en linie, omend ikke noget krav for at det virker.)
import java.awt.*;import java.util.*;public class C extends Frame{Date D=new Date();void T(Date d){D=d;repaint();}double P=Math.PI,A=P/2,a,c,U=.05;int W,H,m,R;double E(int a,int u){return(3*P/2+2*P*a/u)%(2*P);}void N(Graphics g,double q,double s){g.fillPolygon(new int[]{H(s,q),H(U,q+A),H(U,q+3*A)},new int[]{J(s,q),J(U,q+A),J(U,q+3*A)},3);}public void paint(Graphics g){Color C=SystemColor.control;g.setColor(C);g.fillRect(0,0,W=size().width,H=size().height);W-=52;H-=52;R=Math.min(W/2,H/2);g.translate(W/2+25,H/2+36);g.setColor(C.darker());for(m=0;m<12;++m){a=E(m,12);g.drawLine(H(.8),J(.8),H(.9),J(.9));}m=D.getMinutes();N(g,E(D.getHours()*60+m,720),.5);N(g,E(m,60),.8);N(g,E(D.getSeconds(),60),.9);}int H(double y){return(int)(R*y*Math.cos(a));}int H(double y,double q){a=q;return H(y);}int J(double y){return(int)(R*y*Math.sin(a));}int J(double y,double q){a=q;return J(y);}public static void main(String[]_)throws Exception{C c=new C();c.resize(200,200);c.show();for(;;){c.T(new Date());Thread.sleep(200);}}}