![]() Ласло Краус |
Објектно програмирање 2 - колоквијуми Други колоквијум 20. 1. 2010 |
---|
Саставити на језику Java следећи пакет класа:
Label
у облику реалних секунди са три децимале.
Canvas
цртајући црну елипсу и црвену дуж од центра до периферије елипсе. Ширина и висина елипсе је за 20 пиксела мања од ширине, односно висине компоненте. Угао дужи је сразмерна приказиваном времену. Нули одговара усправан положај дужи од центра елипсе нагоре. Порастом времена врх дужи се креће у смеру кретања казаљки на сату. Пун круг одговара једном минуту.
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.I:
(Nastava on \\Xs200-2
)// Stoperica.java package stoperica; import java.awt.Component; public abstract class Stoperica extends Thread { private long t0; private boolean radi = false; public Stoperica() { t0 = System.currentTimeMillis(); start(); } public synchronized void kreni () { t0 = System.currentTimeMillis(); radi = true; notify(); } public void stani() { radi = false; } public synchronized void nastavi () { radi = true; notify(); } public void prekini() { interrupt(); } public abstract Component prikazivac(); protected abstract void prikazi(long dt); public void run () { try { while (! interrupted()) { if (!radi) synchronized (this) { wait(); } sleep( 10); prikazi(System.currentTimeMillis() - t0); } } catch (InterruptedException g) {} } } // Digitalna.java package stoperica; import java.awt.*; public class Digitalna extends Stoperica { private Label prik = new Label( "0.000", Label.CENTER); public Digitalna() { prik.setFont( new Font( null, Font.BOLD, 20)); } public Label prikazivac () { return prik; } public void prikazi( long dt) { prik.setText( String.format( "%.3f", dt/1000.)); } } // Analogna.java package stoperica; import java.awt.*; public class Analogna extends Stoperica { long dt; Platno prik = new Platno(); public Platno prikazivac() { return prik; } public void prikazi( long dt) { this.dt = dt; prik.repaint(); } private class Platno extends Canvas { public void paint( Graphics g) { int a = getWidth() / 2 - 1; int b = getHeight() / 2 - 1; g.translate( a, b); a -= 10; b -=10; g.setColor( Color.BLACK); g.drawOval(-a, -b, 2*a, 2*b); g.setColor( Color.RED); double fi = Math.PI/2 - dt*Math.PI/30000; int x = (int)(a * Math.cos( fi)); int y = (int)(- b * Math.sin( fi)); g.drawLine( 0, 0, x, y); } } } // Program.java import stoperica.*; import java.awt.*; import java.awt.event.*; public class Program extends Frame { Stoperica dig = new Digitalna(); Stoperica ana = new Analogna(); public Program() { super( "Stoperica"); setSize( 200, 200); popuniProzor(); setVisible( true); addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent d) { dig.prekini(); ana.prekini(); dispose(); } }); } private void popuniProzor() { add (dig.prikazivac(), "North"); add (ana.prikazivac(), "Center"); Panel plo = new Panel(); add( plo, "South"); plo.setBackground( Color.LIGHT_GRAY); Button dgm = new Button( "Kreni"); plo.add(dgm); dgm.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { dig.kreni(); ana.kreni(); } }); plo.add( dgm = new Button("Stani")); dgm.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { dig.stani(); ana.stani(); } }); plo.add( dgm = new Button("Nastavi")); dgm.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { dig.nastavi(); ana.nastavi(); } }); } public static void main( String[] varg) { new Program(); } }(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 26.11.2010.