![]() Ласло Краус |
Програмирање на језику Java - колоквијуми Други колоквијум 22. 1. 2007 |
---|
Саставити на језику Java следећи пакет класа:
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// Prikazivac.java package histogram; import java.awt.*; public abstract class Platno extends Canvas { protected double min, max; protected double[] niz; protected int poc, duz; public Platno (double mi, double ma) { min = mi; max = ma; } public Platno (double ma) { max = ma; } public Platno () { max = getHeight()-1; } public void prikazi (double[] niz, int poc) { this.niz = niz; this.poc = poc; duz = niz.length; repaint (); } public abstract void paint (Graphics g); } // Histogram.java package histogram; import java.awt.*; public class Histogram extends Platno { public Histogram (double max) { this.max = max; } public void postaviMax (double max) { this.max = max; } public void paint (Graphics g) { if (niz != null) { g.setColor (Color.BLACK); int sir = getWidth (), vis = getHeight (); double ds = (double)sir / duz, dv = (double)vis / (max - min), sr = 0; for (int i=0; i<duz; i++) { int x = (int) (i * ds); int v = (int) ((niz[(poc+i)%duz]-min)*dv); g.fillRect (x, vis-v, (int)ds-1, v); sr += niz[i]; } int v = vis - (int) (sr/duz * dv); g.setColor (Color.RED); g.drawLine (0, v, sir, v); } } } // Generator.java package histogram; public class Generator extends Thread { private double min = 0, max = 1; private int dt = 100; private boolean radi = false; private Platno platno; private double[] niz; private int tek; public Generator (Platno pl) { platno = pl; start (); } public void parametri (double min, double max, int dt) { this.min=min; this.max=max; this.dt=dt; } public synchronized void kreni (int duz) { niz = new double [duz]; tek = 0; radi = true; notify (); } public synchronized void stani () { radi=false; } public void zavrsi () { interrupt (); } public void run () { try { while (! interrupted ()) { if (! radi) synchronized (this) { wait(); } niz[tek++] = min + (max - min) * Math.random (); if (tek == niz.length) tek = 0; platno.prikazi (niz, tek); sleep (dt); } } catch (InterruptedException g) {} } } // Program.java package histogram; import java.awt.*; import java.awt.event.*; public class Program extends Frame { private Histogram hist = new Histogram (1); private Generator gen = new Generator (hist); private TextField tksMin =new TextField("0.5",3), tksMax =new TextField("1.0",3), tksYmax=new TextField("1.0",3), tksDt =new TextField("500",3), tksDuz =new TextField("30" ,3); private void postaviParametre () { try { gen.parametri ( Double.parseDouble(tksMin.getText()), Double.parseDouble(tksMax.getText()), Integer.parseInt(tksDt.getText()) ); hist.postaviMax (Double.parseDouble(tksYmax.getText())); } catch (NumberFormatException g) {} } private Panel ploParametri() { Panel plo = new Panel (); plo.add (new Label ("min:", Label.RIGHT)); plo.add (tksMin); plo.add (new Label ("max:", Label.RIGHT)); plo.add (tksMax); plo.add (new Label ("Ymax:", Label.RIGHT)); plo.add (tksYmax); plo.add (new Label ("dt:", Label.RIGHT)); plo.add (tksDt); TextListener osm = new TextListener () { public void textValueChanged (TextEvent d) { postaviParametre (); } }; tksMin .addTextListener (osm); tksMax .addTextListener (osm); tksYmax.addTextListener (osm); tksDt .addTextListener (osm); postaviParametre (); return plo; } private Panel ploKomande () { Panel plo = new Panel (); plo.add (new Label ("duz:", Label.RIGHT)); plo.add (tksDuz); Button dgm = new Button ("Kreni"); plo.add (dgm); dgm.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { try { gen.kreni (Integer.parseInt (tksDuz.getText())); } catch (NumberFormatException g) {} } }); plo.add (dgm = new Button ("Stani")); dgm.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { gen.stani (); } }); return plo; } private void popuniProzor () { add (hist, "Center"); Panel plo = new Panel (new GridLayout (2,1)); add (plo, "South"); plo.add (ploParametri()); plo.add (ploKomande()); } public Program () { super ("Histogram"); setSize (400, 200); popuniProzor (); setVisible (true); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) { gen.zavrsi () ; dispose (); } }); } public static void main (String[] varg) { new Program (); } }(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 8.9.2010.