joi, 7 iunie 2012

Transformare de baza

transormare de baza////////////
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class Baza2Transformer implements Transformer
{
    int numar;
    @SuppressWarnings("unchecked")
    List listenerList = new ArrayList();
   
    @SuppressWarnings("unchecked")
    public void addNumarChangeListener(NumarChangeListener listener)
    {
        listenerList.add(listener);
    }
       
    public void setNumar(int numar)
    {
        this.numar=numar;
        for(Object o:listenerList)
        {
            NumarChangeListener listener = (NumarChangeListener) o;
            listener.numarChanged(numar);
        }
    }
   
    public String toString ()
    {
        return Integer.toBinaryString(numar);
    }
   
    public NumarChangeListener createOwnListener()
    {
        return new ListenerBaza2();
    }
   
    public class ListenerBaza2 implements NumarChangeListener
    {
        public void numarChanged(int numar)
        {
            Baza2Transformer.this.numar=numar;
        }
    }
}
................................................
import java.util.ArrayList;
import java.util.List;


public class Baza3Transformer implements Transformer
{
    int numar;
    List listenerList = new ArrayList();
   
    @SuppressWarnings("unchecked")
    public void addNumarChangeListener(NumarChangeListener listener)
    {
        listenerList.add(listener);
    }
   
    public void setNumar(int numar)
    {
        this.numar=numar;
        for(Object o:listenerList)
        {
            NumarChangeListener listener = (NumarChangeListener) o;
            listener.numarChanged(numar);
        }
    }
   
    public String toString ()
    {
        return Integer.toString(numar,3);
    }
   
    public NumarChangeListener createOwnListener()
    {
        return new ListenerBaza3();
    }
   
    public class ListenerBaza3 implements NumarChangeListener
    {
        public void numarChanged(int numar)
        {
            Baza3Transformer.this.numar=numar;
        }
    }
}
..........................................
import java.util.ArrayList;
import java.util.List;




public class Baza4Transformer implements Transformer
{
    int numar;
    List listenerList = new ArrayList();
   
    public void addNumarChangeListener(NumarChangeListener listener)
    {       
        listenerList.add(listener);
    }
   
    public void setNumar(int numar)
    {
        this.numar=numar;
        for(Object o:listenerList)
        {
            NumarChangeListener listener = (NumarChangeListener) o;
            listener.numarChanged(numar);
        }
    }
   
    public String toString ()
    {
        return Integer.toString(numar,4);
    }
   
    public NumarChangeListener createOwnListener()
    {
        return new ListenerBaza4();
    }
   
    public class ListenerBaza4 implements NumarChangeListener
    {
        public void numarChanged(int numar)
        {
            Baza4Transformer.this.numar=numar;
        }
    }
}
..........................................

public class Main
{
    public static void main(String[] args)
    {
        Transformer trans2 = TransformerFactory.createTransformer(2);
        Transformer trans3 = TransformerFactory.createTransformer(3);
        Transformer trans4 = TransformerFactory.createTransformer(4);
       
       
        NumarChangeListener listener2 = trans2.createOwnListener();
        NumarChangeListener listener3 = trans3.createOwnListener();
        NumarChangeListener listener4 = trans4.createOwnListener();
       
        trans2.addNumarChangeListener(listener3);
        trans2.addNumarChangeListener(listener4);
        trans3.addNumarChangeListener(listener2);
        trans3.addNumarChangeListener(listener4);
        trans4.addNumarChangeListener(listener2);
        trans4.addNumarChangeListener(listener3);
       
        trans3.setNumar(5);
       
        System.out.println("Numarul initial: 5");
        System.out.println("Numarul in baza 2: " + trans2.toString());
        System.out.println("Numarul in baza 3: " + trans3.toString());
        System.out.println("Numarul in baza 4: " + trans4.toString());
       
        trans2.setNumar(13);
        System.out.println("Numarul initial: 13");
        System.out.println("Numarul in baza 2: " + trans2.toString());
        System.out.println("Numarul in baza 3: " + trans3.toString());
        System.out.println("Numarul in baza 4: " + trans4.toString());
    }

}
.........................

public interface NumarChangeListener
{
    void numarChanged(int numar);
}
........................

public interface Transformer
{
    public void setNumar(int numar);
    public void addNumarChangeListener(NumarChangeListener listener);
    public NumarChangeListener createOwnListener();
}
........................

public class TransformerFactory
{
    public static Transformer createTransformer(int baza)
    {
        switch(baza)
        {
        case 2: return new Baza2Transformer();
        case 3: return new Baza3Transformer();
        case 4: return new Baza4Transformer();
        default: throw new RuntimeException();
        }
       
    }
}








Arbore JApplet

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Arbore extends JApplet
{
   private JPanel panouNord, panouVest, panouEst, panouSud;
   private JPanel subSouthPanel;
   private DeseneazaPanou drawArea;
   protected JLabel statusLabel;
   protected JTextField preTextField, inTextField, postTextField;
   protected JButton clearButton, butonInsereaza, butonCauta, butonSterge;
   private int latime = 620, inaltime = 450;
   protected boolean amIanApplication;
   protected String dsvInfo, llInfo;

   public void setWidth(int w)
   {
      latime = (w >= 0 ? w : latime);
   }

   public void setHeight(int h)
   {
     inaltime = (h >= 0 ? h : inaltime);
   }

   public void init(boolean isApplication)
   {
      amIanApplication = isApplication;
      init();
   }

   public void checkButtons()
   {
      boolean enabled = drawArea.hasElements();
      butonCauta.setEnabled(enabled);
      butonSterge.setEnabled(enabled);
      preTextField.setText(drawArea.getPreOrder());
      inTextField.setText(drawArea.getInOrder());
      postTextField.setText(drawArea.getPostOrder());
   }

   public void init()
   {
      statusLabel = new JLabel("Arbore Binar");

      panouNord = new JPanel();
      panouVest = new JPanel();
      panouEst = new JPanel();
      panouSud = new JPanel();
      drawArea = new DeseneazaPanou();

      preTextField = new JTextField();
      preTextField.setEditable(false);
      inTextField = new JTextField();
      inTextField.setEditable(false);
      postTextField = new JTextField();
      postTextField.setEditable(false);


     

      clearButton = new JButton("Sterge arborele");
      clearButton.setMnemonic('C');
      clearButton.addActionListener(
         new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
               JOptionPane.showMessageDialog(Arbore.this, "Arborele este vid", "Vid",
               JOptionPane.PLAIN_MESSAGE);
               drawArea.clear();
               Arbore.this.checkButtons();
            }
         }
      );

      butonInsereaza = new JButton("Adauga...");
      butonInsereaza.setMnemonic('A');
      butonInsereaza.addActionListener(
         new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
               String value = JOptionPane.showInputDialog(Arbore.this, "Add Element");
               if(value != null && !value.trim().equals(""))
               {
                  drawArea.addElement(value);
               }
               Arbore.this.checkButtons();
               doLayout();
            }
         }
      );

      butonCauta = new JButton("Cauta...");
      butonCauta.setMnemonic('F');
      butonCauta.addActionListener(
         new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
               String value = JOptionPane.showInputDialog(Arbore.this,
               "Find Element");
               if(value != null && !value.trim().equals(""))
               {
                  if(drawArea.findElement(value))
                     JOptionPane.showMessageDialog(Arbore.this,
                     "Element " + value.trim() + " Gasit",
                     "Sterge Element",
                     JOptionPane.PLAIN_MESSAGE);
                  else
                     JOptionPane.showMessageDialog(Arbore.this,
                     "Elementu nu a fost gasit ",
                     "Elementul a fost gasit", JOptionPane.PLAIN_MESSAGE);
               }
             
            }
         }
      );
      butonCauta.setEnabled(false);
                     
      butonSterge = new JButton("Sterge...");
      butonSterge.setMnemonic('D');
      butonSterge.addActionListener(
         new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
               String value = JOptionPane.showInputDialog(Arbore.this,
               "Sterge Element");
               if(value != null && !value.trim().equals(""))
               {
                  if(!drawArea.deleteElement(value))
                     JOptionPane.showMessageDialog(Arbore.this,
                     "Elementul nu a fost gasit ",
                     "Sterge Element", JOptionPane.PLAIN_MESSAGE);
               }
               Arbore.this.checkButtons();             
            }
         }
      );
      butonSterge.setEnabled(false);

      subSouthPanel = new JPanel();
      subSouthPanel.setLayout(new FlowLayout());
      subSouthPanel.add(clearButton);
      subSouthPanel.add(butonInsereaza);
      subSouthPanel.add(butonCauta);
      subSouthPanel.add(butonSterge);

      panouSud.setLayout(new BorderLayout());
      panouSud.add(subSouthPanel, BorderLayout.CENTER);
      panouSud.add(statusLabel, BorderLayout.SOUTH);


      panouVest.add(new JLabel(" "));
     
      panouEst.setLayout(new GridLayout(10, 1));
      panouEst.add(new JLabel("Traversari:"));
      panouEst.add(new JLabel("preordine:"));
      panouEst.add(preTextField);
      panouEst.add(new JLabel("inordine:"));
      panouEst.add(inTextField);
      panouEst.add(new JLabel("postordine:"));
      panouEst.add(postTextField);


      Container myContainer = getContentPane();
      myContainer.setLayout(new BorderLayout());
      myContainer.add(new JScrollPane(drawArea), BorderLayout.CENTER);
      myContainer.add(panouVest, BorderLayout.WEST);
      myContainer.add(panouSud, BorderLayout.SOUTH);
      myContainer.add(panouEst, BorderLayout.EAST);

      addKeyListener(
         new KeyAdapter()
         {
            public void keyTyped( KeyEvent e )
            {
               String value = "" + e.getKeyChar();
               if(!value.trim().equals(""))
               {
                  drawArea.addElement(value);
                  Arbore.this.checkButtons();
                  doLayout();
               }
            }
         }
      );

      setSize(latime, inaltime);
      setVisible(true);
   }

   public static void main(String args[])
   {
      int latime = 620, inaltime = 450;
     

      JFrame myFrame = new JFrame("Aplicatie");
      myFrame.addWindowListener(
         new WindowAdapter()
         {
            public void windowClosing(WindowEvent e)
            {
               System.exit(0);
            }
         }
      );

      Arbore appletObject = new Arbore();
      appletObject.setWidth(latime);
      appletObject.setHeight(inaltime);

      appletObject.init(true);
      appletObject.start();

      myFrame.getContentPane().add(appletObject);
      myFrame.setSize(latime, inaltime);
      myFrame.setVisible(true);

   }

}

///////clasa deseneazaPanou//////////

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;


public class DeseneazaPanou extends JPanel
{
   protected Nod radacina;
   boolean primaData;
   private int maxx;
   private int maxy;


   public DeseneazaPanou()
   {
      setBackground(Color.white);
      radacina = null;
      primaData = true;
      maxx = 600;
      maxy = 400;
      repaint();
   }


   public Dimension getPreferredSize()
   {
      return new Dimension(maxx, maxy);
   }


   public void paint(Graphics g)
   {
      super.paint(g);
      int xstg = 0;
      int xdrt = 0;
      int yjos = 0;
      boolean changesize = false;
      if(primaData && radacina != null)
      {
         FontMetrics fm = g.getFontMetrics();
         radacina.setMetrics(fm.getHeight(), fm.getMaxAdvance(), fm.getAscent());
         primaData = false;
      }
     
      if(radacina != null)
      {
         xstg = Math.abs(radacina.getMinx(0));
         xdrt = Math.abs(radacina.getMaxx(0)) + 60;
         yjos = radacina.getMaxy(0) + radacina.getinaltime() * 3;
      }
      if(maxx < (xdrt + xstg))
      {
         maxx = (xdrt + xstg);
         changesize = true;
      }
      if(maxy < yjos)
      {
         maxy = yjos;
         changesize = true;
      }
      if(changesize == true)
      {
         setSize(maxx, maxy);
      }
     
     
      if(radacina != null)
         radacina.inorder(g, xstg + 20, 16);
      else
      {
         int y = 16;
         xstg = 30;
         g.drawString("radacina", xstg - 12, y);
         g.drawLine(xstg, y + 2, xstg, y + 16);
         g.drawLine(xstg, y + 16, xstg - 4, y + 16 - 4);
         g.drawLine(xstg, y + 16, xstg + 4, y + 16 - 4);
         g.drawString("null", xstg - 12, y + 28);
      }
   }


   public boolean addElement(String s)
   {
      boolean retValue;
      if(radacina == null)
         radacina = new Nod(s);
      retValue = radacina.add(s);
      repaint();
      return retValue;
   }

   /**
   * Gets the Pre-Order traversal
   * @return a String representation of the pre-order traversal
   */
   public String getPreOrder()
   {
      String temp;
      if(radacina == null)
         return "";
      temp = radacina.txtPreorder();
      return temp.substring(1, temp.length());
   }


   /**
   * Gets the In-Order traversal
   * @return a String representation of the in-order traversal
   */
   public String getInOrder()
   {
      String temp;
      if(radacina == null)
         return "";
      temp = radacina.txtInorder();
      return temp.substring(1, temp.length());
   }

   /**
   * Gets the Post-Order traversal
   * @return a String representation of the post-order traversal
   */
   public String getPostOrder()
   {
      String temp;
      if(radacina == null)
         return "";
      temp = radacina.txtPostorder();
      return temp.substring(1, temp.length());
   }

   /**
   * Clears the tree
   */
   public void clear()
   {
      radacina = null;
      primaData = true;
      repaint();
   }


   public boolean findElement(String elem)
   {
      if(radacina == null)
         return false;
      return radacina.findElement(elem);
   }

   /**
   * Deletes an element
   * @param elem the element
   * @return true if the element was deleted successfully
   */
   public boolean deleteElement(String elem)
   {
      if(radacina == null)
         return false;

      Nod current = radacina;
      Nod parent = radacina;
      boolean isstgChild = true;
   
      while(! current.data.equals(elem))
      {
         parent = current;
        
         if(current.data.compareTo(elem) > 0)
         {
            isstgChild = true;
            current = current.stg;
         }
         else
         {
            isstgChild = false;
            current = current.drt;
         }
         if(current == null)
            return false;
      }
      if(current.stg == null && current.drt == null)
      {
         if(current == radacina)
            radacina = null;
         else
            if(isstgChild)
            {
               parent.stg = null;
               parent.nrFiiStg = 0;
            }
            else
            {
               parent.drt = null;
               parent.nrFiiDrt = 0;
            }
      }
      else if(current.drt == null)
         if(current == radacina)
            radacina = current.stg;
         else if(isstgChild)
            parent.stg = current.stg;
         else
            parent.drt = current.stg;
      else if(current.stg == null)
         if(current == radacina)
            radacina = current.drt;
         else if(isstgChild)
            parent.stg = current.drt;
         else
            parent.drt = current.drt;
      else
      {
         Nod successor = getSuccessor(current);
         if(current == radacina)
            radacina = successor;
         else if(isstgChild)
            parent.stg = successor;
         else
            parent.drt = successor;
         successor.stg = current.stg;
      }
      if(radacina != null)
      {
         radacina.setNumChildsNull();
         radacina.adjustNumChilds();
      }
      repaint();
      return true;
   }


   private Nod getSuccessor(Nod delNod)
   {
      Nod successorParent = delNod;
      Nod successor = delNod;
      Nod current = delNod.drt;
      while(current != null)
      {
         successorParent = successor;
         successor = current;
         current = current.stg;
      }
      if(successor != delNod.drt)
      {
         successorParent.stg = successor.drt;
         successor.drt = delNod.drt;
      }
      return successor;
   }


   public boolean hasElements()
   {
      return radacina != null;
   }

}
/////////////////clasa Nod/////////////
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.util.*;

class Nod
{
   protected String data;
   protected int nrFiiStg;
   protected int nrFiiDrt;
   protected Nod stg;
   protected Nod drt;

   private int latime;
   private int inaltime;
   private int strinaltime;
   private int strlatime;
   private int strAscent;
   private int arrow;
   private int margin;
   private final int rounded = 4;
   private final int ptrline = 8;
   private final int maxLetters = 2;

   /**
   * Class Nod constructor
   * @param d the data
   */
   public Nod(String d)
   {
      data = d;
      stg = null;
      drt = null;
      nrFiiStg = 0;
      nrFiiDrt = 0;
   }


   public Nod(String d, int h, int w, int a)
   {
      data = d;
      stg = null;
      drt = null;
      setMetrics(h, w, a);
   }


   public void setMetrics(int h, int w, int a)
   {
      latime = h * maxLetters;
      inaltime = 12 + h;
      strinaltime = h;
      strlatime = w;
      strAscent = a;
      arrow = ptrline;
      margin = 2;
   }

   /**
   * Adds a
   * @param d the data
   * @param h the inaltime
   * @param w the latime
   * @param a the ascent
   */
   public boolean add(String o)
   {
      boolean retValue = true;
      if(data.equals(o))
      {
         retValue = false;
      }
      else
      {
         if(data.compareTo(o) > 0)
         {
            if(stg == null)
            {
               stg = new Nod(o, strinaltime, strlatime, strAscent);
               nrFiiStg++;
            }
            else
            {
               retValue = stg.add(o);
               if(retValue)
                  nrFiiStg++;
            }
         }
         else
         {
            if(drt == null)
            {
               drt = new Nod(o, strinaltime, strlatime, strAscent);
               nrFiiDrt++;
            }
            else
            {
               retValue = drt.add(o);
               if(retValue)
                  nrFiiDrt++;
            }
         }
      }
      return retValue;
   }


   public boolean findElement(String o)
   {
      boolean retValue = false;
      if(data.equals(o))
         return true;
      if(data.compareTo(o) > 0)
      {
         if(stg != null)
            retValue = stg.findElement(o);
      }
      else
      {
         if(drt != null)
            retValue = drt.findElement(o);
      }
      return retValue;
   }

   public String txtInorder()
   {
      String retValue = "";
      if(stg != null)
         retValue += stg.txtInorder();
      if(data != null)
         retValue += "," + data;
      if(drt != null)
         retValue += drt.txtInorder();
      return retValue;
   }

   public String txtPreorder()
   {
      String retValue = "";
      if(data != null)
         retValue += "," + data;
      if(stg != null)
         retValue += stg.txtPreorder();
      if(drt != null)
         retValue += drt.txtPreorder();
      return retValue;
   }

   public String txtPostorder()
   {
      String retValue = "";
      if(stg != null)
         retValue += stg.txtPostorder();
      if(drt != null)
         retValue += drt.txtPostorder();
      if(data != null)
         retValue += "," + data;
      return retValue;
   }

   public void setNumChildsNull()
   {
      nrFiiStg = -1;
      nrFiiDrt = -1;
      if(stg != null)
         stg.setNumChildsNull();
      if(drt != null)
         drt.setNumChildsNull();
   }

   public void adjustNumChilds()
   {
      if(nrFiiStg == -1)
      {
         if(stg == null)
            nrFiiStg = 0;
         else
         {
            stg.adjustNumChilds();
            nrFiiStg = stg.nrFiiStg + stg.nrFiiDrt + 1;
         }
      }
      if(nrFiiDrt == -1)
      {
         if(drt == null)
            nrFiiDrt = 0;
         else
         {
            drt.adjustNumChilds();
            nrFiiDrt = drt.nrFiiStg + drt.nrFiiDrt + 1;
         }
      }
   }


   public void inorder(Graphics g, int x, int y)
   {
      g.drawString("root", x - 12, y);
      g.drawLine(x, y + 2, x, y + 16);
      g.drawLine(x, y + 16, x - 4, y + 16 - 4);
      g.drawLine(x, y + 16, x + 4, y + 16 - 4);
      inorder(g, x, y + 16, false);
   }

   public void inorder(Graphics g, int x, int y, boolean t)
   {
      int strlatime, xn, yn;
      String tmpStr = data.substring(0, (data.length() < maxLetters ? data.length() : maxLetters));
      g.drawRoundRect(x - latime / 2, y, latime, inaltime, rounded, rounded);
      g.drawLine(x - latime / 2, y + inaltime - ptrline, x + latime / 2, y + inaltime - ptrline);
      g.drawLine(x, y + inaltime - ptrline, x, y + inaltime);
      FontMetrics fm = g.getFontMetrics();
      strlatime = fm.stringWidth(tmpStr);
      g.drawString(tmpStr, x - strlatime / 2, y + inaltime - ptrline - strAscent / 2);
      if(stg == null)
      {
         g.drawLine(x - latime / 2, y + inaltime - ptrline, x, y + inaltime);
         g.drawLine(x, y + inaltime - ptrline, x - latime / 2 + 1, y + inaltime - 1);
      }
      else
      {
         xn = x - latime * (stg.nrFiiDrt + 1) - arrow;
         yn = y + inaltime + ptrline;
         g.drawLine(x - latime / 4, y + inaltime - ptrline / 2, xn, yn);
         stg.inorder(g, xn, yn, false);
      }
      if(drt == null)
      {
         g.drawLine(x + latime / 2, y + inaltime - ptrline, x, y + inaltime);
         g.drawLine(x, y + inaltime - ptrline, x + latime / 2 - 1, y + inaltime - 1);
      }
      else
      {
         xn = x + latime * (drt.nrFiiStg + 1) + arrow;
         yn = y + inaltime + ptrline;
         g.drawLine(x + latime / 4, y + inaltime - ptrline / 2, xn, yn);
         drt.inorder(g, xn, yn, false);
      }
   }

   public int getMinx(int x)
   {
      int xn;
      if(stg != null)
         xn = x - latime * (nrFiiStg + 1) - arrow;
      else
         xn = x - latime;
      return Math.min(x, xn);
   }

   public int getMaxx(int x)
   {
      int xn;
      if(drt != null)
         xn = x + latime * (nrFiiDrt + 1) + arrow;
      else
         xn = x + latime;
      return Math.max(x, xn);
   }

   public int getMaxy(int y)
   {
      int ystg = y, ydrt = y, yn;
      if(stg != null)
      {
         yn = y + inaltime + ptrline;
         ystg = stg.getMaxy(yn);
      }
      if(drt != null)
      {
         yn = y + inaltime + ptrline;
         ydrt = drt.getMaxy(yn);
      }
      return Math.max(Math.max(ydrt, ystg), y);
   }

   public int getinaltime()
   {
      return inaltime;
   }

}

Ceas

////////////////ceas////////////
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.*;


//se ut. o imagine bufferata pt imaginea ceasului pt. ca
// imaginea sa nu fie desenata de fiecare data

@SuppressWarnings("serial")
public class Ceas extends JComponent{

     private static final double TWO_PI=2*Math.PI; //lungimea cercului
     private static final int UPDATE_INTERVAL=100; //milisecunde
                    //intervalul de  "reimprospatare"
     private Calendar timpCurent=Calendar.getInstance();
                    // timpul actual
   
     private int diametru; //inaltime..latime fetei ceasului
     private int x;  
     private int y; //coord mijlocului ceasului
     static long deplasare;
     private BufferedImage clockImage; // imaginea fetei ceasului e salvata
     private javax.swing.Timer timer;  //update clock
     //Fires one or more action events after a specified delay. For example, an animation object can
     //use a Timer as the trigger for drawing its frames.
   
   
     //construtorul acestei clase
   
     private Ascultator asc;
   
   
     public Ceas()
     {
       
         asc=new Ascultator();   
         timer=new javax.swing.Timer(UPDATE_INTERVAL,asc);

     }
   
     // porneste timerul
        public void start() {
            timer.start();
        }
       
   
     private void updateTime()
     {
       
         timpCurent.setTimeInMillis(System.currentTimeMillis());
       
     }

   
        // opreste timerul
        public void stop() {
            timer.stop();
        }
   
     public class Ascultator implements ActionListener {

         public void actionPerformed(ActionEvent arg0) {
   
             updateTime();
             repaint();
         }

     }
   
   
      public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D)g;
           
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            //setRenderingHints(Map hints)
           // inlocuieste valorile pt toate alegerile
            //alg. de redare cu cheile precizate

           //panoul este posibil sa se fi redimensionat ..ia in vedere noile pozitii
           
            int w = getWidth();
            int h = getHeight();
           diametru = ((w < h) ? w : h);
            x=diametru / 2;
            y=diametru / 2;
           
            //cream imaginea de fundal a ceasului daca am trecut pe aici pt
            //prima data sau data dimens panoului s-au schimbat
      
           
            if (clockImage == null
                    || clockImage.getWidth() != w
                    || clockImage.getHeight() != h) {
                clockImage = (BufferedImage)(this.createImage(w, h));
               
                // accesam contextul grafic al imaginii
                Graphics2D g2a = clockImage.createGraphics();
                g2a.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                     RenderingHints.VALUE_ANTIALIAS_ON);
                drawClockFace(g2a);
            }
           
            // deseneaza imaginea cesasului
            g2.drawImage(clockImage, null, 0, 0);
           
            // deseneaza acele ceasului in mod dinamic
            drawClockHands(g2);
        }

      private void drawClockFace(Graphics2D g2) {
            // deseneaza ceasul      
            g2.setColor(Color.cyan);
            g2.fillOval(0, 0, diametru,diametru);
            g2.setColor(Color.BLACK);
            g2.drawOval(0, 0,diametru,diametru);
          
            int raza = diametru/2;
           
            g2.drawString("12", raza-8,35);
            g2.drawString("6", raza-2,diametru-25);
           
            g2.drawString("3", diametru-25,raza+5);
            g2.drawString("9", 20,raza+5);
           
           
           
         
           //desenez intervalele de timp de jur-imprejurul circumferintei
            for (int sec = 0; sec < 60; sec++) {
                int tickStart;
                if (sec%5 == 0) {
                    tickStart = raza - 10;  // desenez linie lunga marcata pt. 5
                } else {
                    tickStart = raza - 5;   // linie scurta.
                }
                drawRadius(g2, sec / 60.0, tickStart , raza);
            }
        }

      private void drawRadius(Graphics2D g2, double fractie,
              int minRadius, int maxRadius) {

         
          //    parametrul  fractie  e o fractie(0.0 - 1.0) din cale
          //    in sensul acelor de ceasornic de la  12.  metodele din Graphics2D ut. radiani
          //    ..invers...de la  3, mici conversii sunt necesare.
         
         
         
          double radians = (0.5 - fractie) * TWO_PI;
          double sine   = Math.sin(radians);
          double cosine = Math.cos(radians);

          int dxmin = x + (int)(minRadius * sine);
          int dymin = y+ (int)(minRadius * cosine);

          int dxmax = x + (int)(maxRadius * sine);
          int dymax = y + (int)(maxRadius * cosine);
          g2.drawLine(dxmin, dymin, dxmax, dymax);
                              }
       
      private void drawClockHands(Graphics2D g2) {
            //... iau inf. necesare din clasa Calendar
            int ore   = timpCurent.get(Calendar.HOUR);
            int minute = timpCurent.get(Calendar.MINUTE);
            int secunde = timpCurent.get(Calendar.SECOND);
            int miliSecunde  = timpCurent.get(Calendar.MILLISECOND);
           
            int handMax = diametru / 2;    // al doilea ac se extinde catre linia din afara a orizontului
           
            double fsecunde = (secunde + (double)miliSecunde/1000) / 60.0;
            drawRadius(g2, fsecunde, 0, handMax);
           
            handMax = diametru / 3;
            double fminute = (minute + fsecunde) / 60.0;
            drawRadius(g2, fminute, 0, handMax);
           
            handMax = diametru / 4;
            drawRadius(g2, (ore + fminute) / 12.0, 0, handMax);
        }
   
   
   
}
...............................


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class CeasAnalogic extends JFrame  implements ActionListener{

    private Ceas  ceas;
   
    private JButton btn1=new JButton("Setare Ora");
    private JButton btn2=new JButton("Setare Minute");
   
     JTextField l1=new JTextField();
     JTextField l2=new JTextField();
   
    public CeasAnalogic() {
     
        ceas = new Ceas();

        btn1.addActionListener(this);
        btn2.addActionListener(this);
         JPanel panel=new JPanel(new GridLayout(4, 1, 5, 5));
     
         panel.add(btn1);
         panel.add(l1);
         panel.add(btn2);
         panel.add(l2);
       
        setPreferredSize(new Dimension(400,400));
        setLayout(new BorderLayout());
        add(ceas, BorderLayout.CENTER);
        add(panel,BorderLayout.WEST);

        
        start();                  //ceasul incepe sa fct 
    }
    public void start() {
        ceas.start();
    }
   
   public void stop() {
        ceas.stop();
    }

   @SuppressWarnings("static-access")
public void actionPerformed(ActionEvent e) {
        @SuppressWarnings("unused")
        long a,b;
        if (e.getSource() == btn1) {
            try {
                a=new Long(l1.getText());
               
                System.out.println(a);
                if(a>12)
                {

                       JOptionPane.showMessageDialog(this,
                                 "numar prea mare",
                                 "setare ora", JOptionPane.PLAIN_MESSAGE);
                }
                else
                    Ceas.deplasare+=a*60*60*60*60*60;
            } catch (NumberFormatException e1) {
                // TODO Auto-generated catch block
                JOptionPane.showMessageDialog(this,
                        "INTRODUCETI NUMAR",
                        "setare ora", JOptionPane.PLAIN_MESSAGE);
               
            }
           
       
           
           
            return;
        }
       
        if (e.getSource() == btn2) {
            try{
                b=new Long(l2.getText());
            if(b>60)
            {

                   JOptionPane.showMessageDialog(this,
                             "numar prea mare",
                             "setare minut", JOptionPane.PLAIN_MESSAGE);
            }
            else
                Ceas.deplasare=+b*60*60*60*60*60*60*60;
        } catch (NumberFormatException e1) {
            JOptionPane.showMessageDialog(this,
                   "INTRODUCETI NUMAR",
                   "setare minut", JOptionPane.PLAIN_MESSAGE);
           
        }
            return;
        }
  }
   
    public static void main(String[] args) {
       
        CeasAnalogic ceas=new CeasAnalogic();
        ceas.setVisible(true);
        ceas.setSize(200, 200);
        ceas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ceas.pack();
        ceas.setResizable(true);
        ceas.setLocationRelativeTo(null);
        ceas.setVisible(true);

    }

}

Coada

public class ArrayCoada implements Coada {

    // declaratie campuri
    /**
     * TODO// de modificat dimensiunea la 5; De facut un program care testeaza
     * funtiile push pop si peek atat cazurile corecte cat si cele exceptionale.
     * In caz de exceptie se vor prinde exceptiile si se vor afisa la consola.
     */
    private T[] elemente = (T[])new Object[100];

    private int start = 0;// pozitia ultimului element adaugat
    private int end = 0;
    // declaratie metode
    public boolean isEmpty()
    {
        if (start == 0 && end == 0)
        {
            return true;// todo
        }
        else
        {
            return false;
        }
    }

    public boolean isFull()
    {
        return (end == 99);

    }

    /**
     * introduce elementul a in stiva. returneaza true daca introducerea a
     * reusit sau false daca stiva este plina
     */
    public boolean offer(T a)
    {
        if (isFull())
        {
            return false;
        }
        else
        if(isEmpty())
        {
            elemente[start] = a;
            elemente[end]= elemente[start];
            end++;
            return true;
        }
        else
        {
           
            elemente[end]=a;
            end++;
            return true;
        }
    }

    public void add(T a) throws CoadaFullException, CoadaInvalidArgumentException
    {

        if (isFull())
        {
            throw new CoadaFullException("Stiva plina");
        }
        else
        {
            if (a == null)
            {
                throw new CoadaInvalidArgumentException();
            }
            if(isEmpty())
            {
                elemente[start] = a;
                elemente[end]= elemente[start];
                end++;
            }   
            else
            {
               
                elemente[end]=a;
                end++;
            }
        }
    }

    /**
     * se extrage un element din stiva si se retruneaza. Daca stiva este goala
     * va returna valoarea null
     */
    public T poll()
    {
        if (isEmpty())
        {
            return null;
        }
        else
        {
            T b;
            b = elemente[start];
            for(int i=start;i                elemente[i]=elemente[i+1];
            end--;
            return b;
        }
    }

    public T pop() throws CoadaEmptyException
    {
        if (isEmpty())
        {
            throw new CoadaEmptyException();
        }
        else
        {
            T b;
            b = elemente[start];
            for(int i=start;i                elemente[i]=elemente[i+1];
            end--;
            return b;
        }
    }

    /**
     * se obtine valoarea din varful stivei fara ca aceasta sa fie stearsa din
     * stiva sau se returneaza null daca stiva ii goala.
     */
    public T element()
    {
        if (isEmpty())
        {
            return null;
        }
        else
        {
            return elemente[start];
        }
    }

    /**
     * se obtine valoarea din varful stivei fara ca aceasta sa fie stearsa din
     * stiva. In mod similar se genereaza StackEmptyException sau se returneaza
     * null
     */
    public T peek() throws CoadaEmptyException {

        if (isEmpty())
        {
            throw new CoadaEmptyException();
        }
        else
        {
            return elemente[start];
        }
    }

    public String toString() {
        String s = "{";
        for (int i = start; i < end; i++) {
            s += elemente[i] + ",";
        }
        /*if (!isEmpty()) {
            s += elemente[start];
        }*/
        s += "}";
        return s;
    }

}
......exceptii....
package packq;

public class CoadaEmptyException extends CoadaException{

    public CoadaEmptyException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CoadaEmptyException(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public CoadaEmptyException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public CoadaEmptyException(Throwable arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

   
}
............
package packq;

public class CoadaException extends Exception {

    public CoadaException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CoadaException(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public CoadaException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public CoadaException(Throwable arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }
   
   

}
.................
package packq;

public class CoadaFullException extends CoadaException{

    public CoadaFullException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CoadaFullException(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public CoadaFullException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public CoadaFullException(Throwable arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }
   
   

}
............
package packq;

public class CoadaInvalidArgumentException extends CoadaException{

    public CoadaInvalidArgumentException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CoadaInvalidArgumentException(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public CoadaInvalidArgumentException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public CoadaInvalidArgumentException(Throwable arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }
       
   

}
.............
package packq;

public interface Coada
{
    boolean isEmpty();
    boolean isFull();
    boolean offer(T a);   
    void add(T a) throws CoadaFullException, CoadaInvalidArgumentException;
    T poll();
    T pop() throws CoadaEmptyException;
    T element();
    T peek() throws CoadaEmptyException;
}
.............
package packq;


import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
public class GUIMain
{
    Coada queue = new ArrayCoada ();
    JTextField textField;
    JLabel labelContinut;
    JLabel labelExtrase;
    JLabel labelVarf;
   
    public void init()
    {
        JFrame fereastra = new JFrame("Coada");
        fereastra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container conteintPain = fereastra.getContentPane();
        conteintPain.setLayout(new GridLayout(8,1));
       
        JLabel label1 = new JLabel("Introduceti numarul: ");
        conteintPain.add(label1);
       
        textField = new JTextField();
        conteintPain.add(textField);
       
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        conteintPain.add(panel);
       
        JButton adauga = new JButton("Adauga");
        panel.add(adauga);
        adauga.addActionListener(new AdaugaAction());
       
        JButton extrage = new JButton("Extrage");
        panel.add(extrage);
        extrage.addActionListener(new ExtrageAction());
       
        JButton varf = new JButton("Varf");
        panel.add(varf);
        varf.addActionListener(new VarfAction());
       
        JButton golire = new JButton("Golire");
        panel.add(golire);
        golire.addActionListener(new GolireAction());
       
       
       
       
        JLabel label2 = new JLabel("Continutul Stivei: ");
        conteintPain.add(label2);
       
        labelContinut = new JLabel();
        labelContinut.setText(queue.toString());
        conteintPain.add(labelContinut);
       
        labelExtrase = new JLabel();
        labelExtrase.setText("Nu s-a extras inca");
        conteintPain.add(labelExtrase);
       
        labelVarf = new JLabel();
        labelVarf.setText("Varf");
        conteintPain.add(labelVarf);
       
        fereastra.pack();
        fereastra.setVisible(true);
    }
   
   
   
    public static void main(String[] args)
    {
        GUIMain gui = new GUIMain();
        gui.init();
    }
   
    private class AdaugaAction implements ActionListener
    {
       
        public void actionPerformed(ActionEvent arg0)
        {
            System.out.println("Buton Adauga");   
            String a = textField.getText();
            //Integer b = Integer.parseInt(a);
            try {
                queue.add(a);
            } catch (CoadaFullException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (CoadaInvalidArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }    // sau offer
           
            labelContinut.setText(queue.toString());
        }
       
    }
   
    private class ExtrageAction implements ActionListener
    {
       
        public void actionPerformed(ActionEvent arg0)
        {
            System.out.println("Buton Extrage ");
            try {
                    // sau poll
                labelExtrase.setText("" + queue.pop());
            } catch (CoadaEmptyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            labelContinut.setText(queue.toString());
        }
       
    }
   
   
   
    private class VarfAction implements ActionListener
    {
       
        public void actionPerformed(ActionEvent arg0)// throws StackEmptyException
        {
            System.out.println("Buton varf");   
                // sau peek
            labelVarf.setText("Varful este: "+queue.element());
           
        }
       
    }
   
    private class GolireAction implements ActionListener
    {
       
        public void actionPerformed(ActionEvent arg0)// throws StackEmptyException
        {
            System.out.println("Buton varf");   
            while(queue.isEmpty() == false)
            {
                try {
                    queue.pop();
                } catch (CoadaEmptyException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            labelContinut.setText(queue.toString());
           
        }
       
    }
}