Académique Documents
Professionnel Documents
Culture Documents
3
la PC
Varianta: 6
Cronometru, cu butoanele start/stop i reset.
Listing-ul programului:
package lab3pc;
import
import
import
import
import
java.util.*;
java.awt.*;
java.awt.event.*;
java.applet.*;
java.text.*;
16));
} catch (NullPointerException e) {
} catch (NumberFormatException e) {
}
}
// Metoda de mai jos este partea pRincipala a programului
@Override
public void update(Graphics g) {
int xm, ym, xs, ys,
s=0,m=0;
String S1=new String(""),S2=new String("");
int temp;
currentDate = new Date();
s = (currentDate.getSeconds()-DataStart.getSeconds())-Interval_sec;
m = s/60;
//Calculeaza pozitiile virfurilor arcelor cronometrului
xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
// Sterge arcele precedente
g.setColor(getBackground());
if (xs != lastxs || ys != lastys) {
g.drawLine(xcenter, ycenter, lastxs, lastys);
}
if (xm != lastxm || ym != lastym) {
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym);
}
// Calcularea sirului de afisare a timpului trecut S
g.setFont(clockFaceFont);
switch(s/10)
{ case 0: S2="0"; break;
case 1: S2="1"; break;
case 2: S2="2"; break;
case 3: S2="3"; break;
case 4: S2="4"; break;
case 5: S2="5"; break;
case 6: S2="6"; break;
case 7: S2="7"; break;
case 8: S2="8"; break;
case 9: S2="9"; break;
}
switch(s%10)
{ case 0: S2=S2+"0"; break;
case 1: S2=S2+"1";
case 2: S2=S2+"2";
case 3: S2=S2+"3";
case 4: S2=S2+"4";
case 5: S2=S2+"5";
case 6: S2=S2+"6";
case 7: S2=S2+"7";
case 8: S2=S2+"8";
case 9: S2=S2+"9";
}
a2.setText(S2);
break;
break;
break;
break;
break;
break;
break;
break;
break;
switch(m/10)
{ case 0: S1=S1+"0"; break;
case 1: S1=S1+"1"; break;
case 2: S1=S1+"2"; break;
case 3: S1=S1+"3"; break;
case 4: S1=S1+"4"; break;
case 5: S1=S1+"5"; break;
case 6: S1=S1+"6"; break;
case 7: S1=S1+"7"; break;
case 8: S1=S1+"8"; break;
case 9: S1=S1+"9"; break;
}
switch(m%10)
{ case 0: S1=S1+"0"; break;
case 1: S1=S1+"1"; break;
case 2: S1=S1+"2"; break;
case 3: S1=S1+"3"; break;
case 4: S1=S1+"4"; break;
case 5: S1=S1+"5"; break;
case 6: S1=S1+"6"; break;
case 7: S1=S1+"7"; break;
case 8: S1=S1+"8"; break;
case 9: S1=S1+"9"; break;
}
a1.setText(S1);
// Tiparirea timpului si a bratelor cronometrului
g.setColor(paint_thread.updated_color);
g.drawLine(xcenter, ycenter, xs, ys);
g.setColor(handColor);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
lastxs = xs; lastys = ys;
lastxm = xm; lastym = ym;
}
@Override
public void paint(Graphics g) {
int i;
a1.move(55,145);
a2.move(85,145);
START_STOP.move(25,5);
RESET.move(100,5);
g.setFont(clockFaceFont);
// Deseana circumferinta si arcele cronometrului
g.setColor(handColor);
g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
g.setColor(numberColor);
g.drawString("45", xcenter-45, ycenter+3);
g.drawString("15", xcenter+35, ycenter+3);
g.drawString("60", xcenter-5, ycenter-37);
g.drawString("30", xcenter-3, ycenter+45);
// Deseana arcele
g.setColor(numberColor);
g.drawLine(xcenter, ycenter, lastxs, lastys);
g.setColor(handColor);
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym);
}
@Override
public void start() {
timer = new Thread(this);
timer.start();
paint_thread = new MyThread();
paint_thread.start();
}
@Override
public void stop() {
timer = null;
paint_thread = null;
}
@Override
public void run() {
Thread me = Thread.currentThread();
while (timer == me) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
}
repaint();
}
}
@Override
public void actionPerformed(ActionEvent thisEvent)
{ Thread me = Thread.currentThread();
int temp;
if(thisEvent.getSource()==START_STOP && Stare==1)
{
SecOprire=new Date().getSeconds();
timer.suspend();
Stare=0;}
else if(thisEvent.getSource()==START_STOP && Stare==0)
{
SecPornire=new Date().getSeconds();
Interval_sec=Interval_sec+SecPornire-SecOprire;
while(Interval_sec>60) { Interval_sec=Interval_sec-60; }
timer.resume();
Stare=1;}
if(thisEvent.getSource()==RESET) {DataStart=new Date(); Interval_sec=0;}
}
}
Rezultatul obtinut: