Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Други колоквијум
24. 1. 2008

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Саставити на језику Java следећи пакет класа:


Напомене (садржај)


Решење задатка (поставка | садржај)

// Tocak.java

package lutrija;
import java.awt.*;

class Tocak extends Label implements Runnable {
  private int cifra;
  private int dt;
  private int korak;
  private Thread nit = new Thread (this);
  private boolean radi = false;

  Tocak (int ddt, boolean raste) {
    dt = ddt;
    korak = raste ? 1 : -1;
    setFont (new Font(null,Font.BOLD,24));
    setBackground (Color.YELLOW);
    setForeground (Color.RED);
    setAlignment (CENTER);
    brisi ();
    nit.start ();
  }

  public void run () {
    try {
      while (! nit.interrupted ()) {
        if (! radi) synchronized (this) { wait(); }
        cifra = (cifra + korak + 10) % 10;
        setText (Integer.toString (cifra));
        nit.sleep (dt);
      }
    } catch (InterruptedException g) {}
  }

  public void brisi () { setText ("  "); }

  synchronized void kreni () { radi = true; notify (); }

  public int cifra () { radi = false; return cifra; }

  void zavrsi () { nit.interrupt (); }
}

// Masina.java

package lutrija;
import java.awt.*;

public class Masina extends Panel {
  private Tocak[] niz;
  private int n;
  private boolean radi = false;

  public Masina (int kap) {
    niz = new Tocak [kap];
    for (int i=0; i<kap; i++)
      add (niz[kap-i-1] = new Tocak((int)(50+Math.random()*150), i%2==0));
  }

  public void kreni (int n) {
    if (!radi) {
      if (n<=0 || n>niz.length) n = niz.length;
      for (Tocak t: niz) t.brisi ();
      radi = true;
      this.n = n;
      for (int i=0; i<n; i++) { niz[i].kreni(); }
    }
  }

  public String stani () {
    radi = false;
    String s = "";
    for (int i=0; i<n; s = niz[i++].cifra()+s);
    return s;
  }

  public void unisti () { for (Tocak t: niz) t.zavrsi (); }
}

// Izvlacenje.java

package lutrija;
import java.awt.*;
import java.awt.event.*;

public class Izvlacenje extends Frame {
  private static final int DUZ = 6;
  Masina masina = new Masina (DUZ);
  Button dgmKreni, dgmStani;
  CheckboxGroup grupa = new CheckboxGroup ();
  TextArea tksBrojevi;

  private void mozeKreni  (boolean da) {
    dgmKreni.setEnabled ( da);
    dgmStani.setEnabled (!da);
  }

  Panel ploKomande () {
    Panel plo = new Panel ();
    plo.add (dgmKreni = new Button ("Kreni"));
    dgmKreni.addActionListener ( new ActionListener () {
      public void actionPerformed (ActionEvent d) {
        mozeKreni (false);
        masina.kreni (Integer.parseInt(grupa.getSelectedCheckbox().getLabel()));
      }
    });
    plo.add (dgmStani = new Button ("Stani"));
    dgmStani.addActionListener ( new ActionListener () {
      public void actionPerformed (ActionEvent d) {
        mozeKreni (true);
        tksBrojevi.append (masina.stani() + '\n');
      }
    });
    mozeKreni (true);
    return plo;
  }

  Panel ploCifre () {
    Panel plo = new Panel ();
    for (int i=DUZ; i>0; i--) plo.add (new Checkbox(i+"", grupa, i==0));
    return plo;
  }

  Panel ploBrojevi () {
    Panel plo = new Panel (new BorderLayout ());
    plo.add(tksBrojevi=new TextArea(1,7),"Center");
    Button dgm = new Button ("Isprazni");
    plo.add (dgm, "South");
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) { tksBrojevi.setText (""); }
    });
    return plo;
  }

  private void popuniProzor () {
    add (ploBrojevi(), "East");
    Panel ploca = new Panel (new BorderLayout ());
    add (ploca, "Center");
    ploca.add (masina, "North");
    Panel plo = new Panel (new GridLayout(2,1));
    ploca.add (plo, "South");
    plo.add (ploCifre ());
    plo.add (ploKomande ());
  }

  public Izvlacenje () {
    super ("Izvlacenje");
    setSize (300, 180);
    setResizable (false);
    popuniProzor ();
    setVisible (true);
    addWindowListener (new WindowAdapter () {
      public void windowClosing (WindowEvent d) { masina.unisti (); dispose (); }
    });
  }

  public static void main (String[] varg) { new Izvlacenje (); }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 8.9.2010.