import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Kell extends Applet implements Runnable { Thread tiksuti; // Kellalõim int vxs, vys, vxm, vym, vxh, vyh; // kellaosutite koordinaatide hoidmiseks Date aeg; // hoiab endas kellaagea Date algaeg; // hoiab endas algkellaagea Date alarm; // alarmi tarbeks int mode; // millises kellanäitamisreziimis oleme? Kuulamine listener = new Kuulamine(this); // kuular, mis kuulab kuidas nuppudele vajutatakse boolean alarmNaidatud = false; // näitab, kas alrmi on näidatud juba. Panel p1 = new Panel(); // tehakse kaks paneeli, kuhu peale topitakse nuppe. Panel p2 = new Panel(); TextField t_h = new TextField("0", 2); // tehakse tekstiaknad j a TextField t_m = new TextField("0", 2); TextField t_s = new TextField("0", 2); TextField a_h = new TextField("0", 2); TextField a_m = new TextField("0", 2); TextField a_s = new TextField("0", 2); Button b_alarm = new Button("Alarm"); Button b_aeg = new Button("Arvuti aeg"); Button b_minu = new Button("Minu aeg"); // appleti initsialiseerimine public void init() { int x,y; vxs = vys = vxm = vym = vxh = vyh = 0; // kysitakse mis on praegu aeg. aeg = new Date(); algaeg = new Date(); alarm = null; // nullitakse alarm. mode = 1; // nuppudele yteldakse, et neil on kuularid. b_alarm.addActionListener(listener); b_aeg.addActionListener(listener); b_minu.addActionListener(listener); // paneelidele pannakse nupud p1.add(t_h); p1.add(t_m); p1.add(t_s); p1.add(b_minu); p2.add(a_h); p2.add(a_m); p2.add(a_s); p2.add(b_alarm); p1.add(b_aeg); add(p1); // paneelid pannakse appleti peale. add(p2); // mis moodis oleme, algul oleme arvutimoodis. mode = 1; resize(300,400); // akna suuruse määramine } // pohiline tykk, kus hakkab loopimine public void paint(Graphics g) { int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xkesk, ykesk; // kui mode=1, siis on arvuti aeg if (mode==1) { aeg = new Date(); } if (mode==2) { // siia peaks tulema mingi kood, mis tootab nn kliendi määratud ajaga } // alarmi osa: g.setColor(getBackground()); // aktiivne värv on taustavärv if (alarm != null) // kui alarm on pandud if ((alarm.getSeconds() == aeg.getSeconds()) && (alarm.getMinutes() == aeg.getMinutes()) && (alarm.getHours() == aeg.getHours()) && !alarmNaidatud) { g.setColor(Color.black); // aktiivne värv on must. alarmNaidatud = true; // ytleme, et näitasime alarmi ära. } else { if (alarmNaidatud) { // kui alarm on näidatud, siis näitame seda ka ikka edasi. g.setColor(Color.black); } } // äratame! g.drawString("Äratus!!!", 10, 145); g.setColor(Color.black); // aja kysimine s = aeg.getSeconds(); h = aeg.getHours(); m = aeg.getMinutes(); // ytleme ylemistele kastidele kellaaega. t_h.setText("" + h); t_m.setText("" + m); t_s.setText("" + s); // ringi keskkoht xkesk=150; ykesk=145; // arvutatakse seierite koordinaate xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xkesk); ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ykesk); xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xkesk); ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ykesk); xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xkesk); yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ykesk); // ringi ja numbrite joonistamine g.setColor(Color.black); g.drawOval(xkesk-50,ykesk - 50, 100,100); g.drawString("9",xkesk-45,ykesk+3); g.drawString("3",xkesk+40,ykesk+3); g.drawString("12",xkesk-5,ykesk-37); g.drawString("6",xkesk-3,ykesk+45); // kui tarvis, siis joonistatakse vana seis yle: g.setColor(getBackground()); if (xs != vxs || ys != vys) { g.drawLine(xkesk, ykesk, vxs, vys); } if (xm != vxm || ym != vym) { g.drawLine(xkesk, ykesk-1, vxm, vym); g.drawLine(xkesk-1, ykesk, vxm, vym); } if (xh != vxh || yh != vyh) { g.drawLine(xkesk, ykesk-1, vxh, vyh); g.drawLine(xkesk-1, ykesk, vxh, vyh); } g.setColor(Color.black); g.drawLine(xkesk, ykesk, xs, ys); g.drawLine(xkesk, ykesk-1, xm, ym); g.drawLine(xkesk-1, ykesk, xm, ym); g.drawLine(xkesk, ykesk-1, xh, yh); g.drawLine(xkesk-1, ykesk, xh, yh); // salvestatakse vanad muutujad [selleks, et kustutada vana seis] vxs=xs; vys=ys; vxm=xm; vym=ym; vxh=xh; vyh=yh; // paneme aja nulli,et varsti uuesti kysida. aeg=null; } // loim tiksuti pannakse käima. public void start() { tiksuti = new Thread(this); tiksuti.start(); } // siis loim loim peatub pannakse ta nulliks, et mälu ei raiskaks. public void stop() { tiksuti = null; } // loimu sisu ehk see koht, mis jooksutab kella. public void run() { Thread me = Thread.currentThread(); while (tiksuti == me) { // kuni veel lõim jookseb try { // lõim peatatakse 0.5 sekundiks, et applet arvutit kinni ei tombaks. Thread.currentThread().sleep(500); } catch (InterruptedException e) { } // joonistatakse applet uuesti yle. repaint(); } } // värskendus public void update(Graphics g) { paint(g); } // paneb alarmi, kui on vajutatud "alarm" nuppu public void SetiAlarm() { alarm = new Date(); // teeme uue alarmi. alarm.setHours(Integer.parseInt(a_h.getText())); // kysime, mis kirjutati alarmisettimise akendesse. alarm.setMinutes(Integer.parseInt(a_m.getText())); alarm.setSeconds(Integer.parseInt(a_s.getText())); alarmNaidatud = false; // ytleme, et seda alarmi pole veel näidatud } } // klass, mis tegeleb nupuvajutuste kuulamisega class Kuulamine implements ActionListener { // see applet, mis kasutab kuularit- Kell omanik; // Kuulamise klassi tegemiseks tarvilik., public Kuulamine(Kell ema) { omanik = ema; } // siitkaudu tulevad koik actionid, kui nupule vajutatakse. public void actionPerformed(ActionEvent e) { String arg = e.getActionCommand(); // Kysitakse, mis oli nupu nimi kuhu vajutati. if (arg.equals("Alarm")) { // kui nupp oli alarm, siis.... omanik.SetiAlarm(); } if (arg.equals("Arvuti aeg")) { // kui nupp oli arvuti aeg, siis.... } if (arg.equals("Minu aeg")) { // kui nupp oli arvuti aeg, siis.... } } }