![]() Ласло Краус |
Програмирање на језику 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.