![]() Ласло Краус |
Програмирање на језику Java - испити Практични испит 27. 4. 2006. |
---|
Саставити на језику Java следећи пакет класа:
long
System.currentTimeMillis()
.
Button
. Дугме може да се одреди при стварању објекта, али може и касније да се постави. Може се подесити да ли ће се приказивати тренутна или средња температура. Боја дугмета се одређује као new
Color(Color.HSBtoRGB(
boja,1,1))
, где се boja типа float
израчунава помоћу формуле 0,7(50−temp)/80. Натпис думета се добија помоћу String
String.format("%.1f",
temp)
.
Panel
сваких 100 ms приказује средњу вредност тренутних температура свих садржаних тачака као и графички приказ тачака у матричном распореду. Ствара се празна задатих димензија после чега се тачке постављају једна по једна на задата места области. Може се подесити да ли ће се за све тачке приказивати тренутне или средње температуре, да се покрене и да се заустави цикличко освежавање графичког приказа као и завршетак рада мерне области.
Саставити на језику Java програм с графичком корисничком површи који према слици приказује рад графичке мерне области од 5×8 графичких мерних тачака с почетним температурама од 20 °C.
studentx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// MernaTacka.java package merenje; public class MernaTacka extends Thread { protected double T, suma_Tdt; protected long t, suma_dt; public MernaTacka (double T0) { T=T0; start(); } public void ispocetka () { t = System.currentTimeMillis (); suma_Tdt = suma_dt = 0; } public void run () { ispocetka (); try { while (! interrupted ()) { sleep (100 + (int)(Math.random()*100)); long sad = System.currentTimeMillis (); long dt = sad - t; suma_Tdt += T*dt; suma_dt += dt; t = sad; T += Math.random () * 2 - 1; } } catch (InterruptedException g) {} } public double temp () { return T; } public double srTemp () { long dt = System.currentTimeMillis () - t; return (suma_Tdt + T * dt) / (suma_dt + dt); } public void zavrsi () { interrupt (); } public String toString () { return T + "\t" + srTemp (); } } // GrafickaMernaTacka.java package merenje; import java.awt.*; public class GrafickaMernaTacka extends MernaTacka { private Button dugme; private boolean birajSrTemp = false; public GrafickaMernaTacka (double T0, Button dgm) { super (T0); dugme = dgm; } public void postaviDugme (Button dgm) { dugme = dgm; } public void birajSrTemp (boolean b) { birajSrTemp = b; } public Button dohvatiDugme () { return dugme; } public void ispocetka () { super.ispocetka (); prikazi (); } public void prikazi () { if (dugme != null) { double TT = birajSrTemp ? srTemp() : T; dugme.setLabel (String.format("%.1f",TT)); float boja = (float)(0.7*(50-TT)/80); dugme.setBackground (new Color(Color.HSBtoRGB(boja,1,1))); } } } // GMerenje.java package merenje; public class GMerenje extends Exception { String por; public GMerenje (String p) { por = p; } public String toString () { return por; } } // Gindeks.java package merenje; public class GIndeks extends GMerenje { public GIndeks (int v, int k) { super ("Neisparvni indeksi [" + v + "][" + k + "]!"); } } // Gprazno.java package merenje; public class GPrazno extends GMerenje { public GPrazno (int v, int k) { super ("Polje [" + v + "][" + k + "] je parno!"); } } // GNema.java package merenje; public class GNema extends GMerenje { public GNema () { super ("Ne postoji neijedna merna tacka!"); } } // Karta.java package merenje; import java.awt.*; public class MernaOblast { protected MernaTacka[][] obl; public MernaOblast (int vrs, int kol) { obl = new MernaTacka[vrs][kol]; } void postavi (int v, int k, MernaTacka mt) throws GIndeks { if (v<0 || v>=obl.length || k<0 || k>=obl[0].length) throw new GIndeks (v, k); obl[v][k] = mt; } double temp (int v, int k) throws GIndeks, GPrazno { if (v<0 || v>=obl.length || k<0 || k>=obl[0].length) throw new GIndeks (v, k); if (obl[v][k] == null) throw new GPrazno (v, k); return obl[v][k].temp (); } double srTemp (int v, int k) throws GIndeks, GPrazno { if (v<0 || v>=obl.length || k<0 || k>=obl[0].length) throw new GIndeks (v, k); if (obl[v][k] == null) throw new GPrazno (v, k); return obl[v][k].srTemp (); } double srTemp () throws GNema { double s = 0; int n = 0; for (int v=0; v<obl.length; v++) for (int k=0; k<obl[0].length; k++) if (obl[v][k] != null) { s += obl[v][k].temp (); n++; } if (n == 0) throw new GNema (); return s / n; } public void ispocetka () { for (int v=0; v<obl.length; v++) for (int k=0; k<obl[0].length; k++) if (obl[v][k] != null) obl[v][k].ispocetka (); } public void zavrsi () { for (int v=0; v<obl.length; v++) for (int k=0; k<obl[0].length; k++) if (obl[v][k] != null) obl[v][k].zavrsi (); } } // GrafickaMernaOblast.java package merenje; import java.awt.*; public class GrafickaMernaOblast extends MernaOblast implements Runnable { private boolean radi = false; private Thread nit = null; private Panel ploca; private Label oznSrTemp = new Label (null, Label.CENTER); private int kol; public GrafickaMernaOblast (int vrs, int kol, Panel plo) { super (vrs, kol); ploca = plo; this.kol = kol; plo.setLayout (new BorderLayout ()); plo.add (oznSrTemp, "North"); oznSrTemp.setBackground (new Color (240, 240, 240)); ploca = new Panel (new GridLayout (vrs, kol)); for (int i=0; i<vrs*kol; i++) ploca.add (new Button()); plo.add (ploca, "Center"); } public void postavi (int v, int k, GrafickaMernaTacka gmt) throws GIndeks { super.postavi (v, k, gmt); gmt.postaviDugme ((Button)ploca.getComponents()[v*kol+k]); } public void birajSrTemp (boolean da) { for (int v=0; v<obl.length; v++) for (int k=0; k<obl[0].length; k++) if (obl[v][k] != null) ((GrafickaMernaTacka)obl[v][k]).birajSrTemp (da); } public void run () { try { while (! nit.interrupted ()) { if (! radi) synchronized(this) { wait(); } for (int v=0; v<obl.length; v++) for (int k=0; k<obl[0].length; k++) if (obl[v][k] != null) ((GrafickaMernaTacka)obl[v][k]).prikazi (); try { oznSrTemp.setText (String.format ("Tsr=%.1f", srTemp ())); } catch (GNema g) {} nit.sleep (100); } } catch (InterruptedException g) {} nit = null; } public synchronized void kreni () { if (nit == null) (nit = new Thread (this)).start (); radi = true; notify (); } public void stani () { radi = false; } public void zavrsi () { super.zavrsi(); if (nit != null) nit.interrupt (); } } // Merenje.java import merenje.*; import java.awt.*; import java.awt.event.*; public class Merenje extends Frame { private int vrs = 5, kol = 8; private GrafickaMernaOblast gmo; private Merenje () { super ("Merenje"); setSize (300, 200); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) { gmo.zavrsi(); dispose (); } }); Panel plo = new Panel (); add (plo, "South"); final Checkbox pot = new Checkbox ("Tsr"); plo.add (pot); pot.addItemListener (new ItemListener () { public void itemStateChanged (ItemEvent d) { gmo.birajSrTemp (pot.getState ()); } }); Button dgm=new Button("Kreni"); plo.add(dgm); dgm.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { gmo.kreni (); } }); plo.add (dgm = new Button("Stani")); dgm.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { gmo.stani (); } }); plo.add (dgm = new Button("Ispocetka")); dgm.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { gmo.ispocetka (); } }); add (plo=new Panel(), "Center"); gmo = new GrafickaMernaOblast (vrs, kol, plo); try { for (int v=0; v<vrs; v++) for (int k=0; k<kol; k++) gmo.postavi (v, k, new GrafickaMernaTacka(20, null)); } catch (GIndeks g) {} } public static void main (String[] varg) { new Merenje ().setVisible (true); } }(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 8.9.2010.