joi, 7 iunie 2012

Graf

clasa DesenareGraf//////
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class DesenareGraf extends JFrame implements Observer {
     private JPanel panouNord, panouVest, panouEst, panouSud;
     private DeseneazaPanou1 drawArea;
     private JLabel statusLabel;
   
   
    public DesenareGraf(Subject sub)
    {
    super("Graf neorientat");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
        sub.registerInterest(this);
   
   
     panouNord = new JPanel();
     panouVest = new JPanel();
     panouEst = new JPanel();
     panouSud = new JPanel();
     drawArea = new DeseneazaPanou1();
   
     statusLabel = new JLabel("Desen Graf");
     panouSud.add(statusLabel, BorderLayout.SOUTH);
    
     Container myContainer = getContentPane();
      myContainer.setLayout(new BorderLayout());
      myContainer.add(panouVest, BorderLayout.NORTH);
      myContainer.add(drawArea,BorderLayout.CENTER);
      //myContainer.add(new JScrollPane(drawArea), BorderLayout.CENTER);
      myContainer.add(panouVest, BorderLayout.WEST);
      myContainer.add(panouSud, BorderLayout.SOUTH);
      myContainer.add(panouEst, BorderLayout.EAST);
   
      this.setBackground(Color.WHITE);
    this.setBounds(600,600,600,500);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    }
   
   
     public void sendNotify(Graph graf)
     {
         drawArea.deseneaza(graf);
     }
}
///////////////clasa DeseneazaPanou////////////

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


public class DeseneazaPanou extends JPanel
{
   boolean primaData;
   private int maxx;
   private int maxy;
   private Graph graf=null;

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


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


   public void paint(Graphics g)
   {
      super.paint(g);
      int x,y;

     
  
    if(graf==null)
    {
        g.drawLine(20, 50,maxx-50, 50);
       
       
        x=maxx-70;
       
        g.drawLine(60, 20,60,maxy-100);
        int x_start=80;
        int x_end=x-20;
        System.out.println("x_start= "+x_start);
        System.out.println("x_end= "+x_end);
       
        int dist_x=(x_end-x_start)/10;
       
       
        y=maxy-120;
        int y_start=45;
       
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start+i*dist_x ,y_start);
        }
       
   
         y_start=70;
        int y_end=y-10;
       
       
       
       
        int dist_y=(y_end-y_start)/10;
        x_start=40;
   
        System.out.println("y_start= "+y_start);
        System.out.println("y_end= "+y_end);
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start ,y_start+i*dist_y);
        }
       
       
     x_start=80;
     y_start=70;    
       
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
            {
                String sir="0";
                g.drawString(sir,x_start+j*dist_x,y_start+i*dist_y);
            }
       
       
       
       
   
    }
    else
    {
       
g.drawLine(20, 50,maxx-50, 50);
       
       
        x=maxx-70;
       
        g.drawLine(60, 20,60,maxy-100);
        int x_start=80;
        int x_end=x-20;
        System.out.println("x_start= "+x_start);
        System.out.println("x_end= "+x_end);
       
        int dist_x=(x_end-x_start)/10;
       
       
        y=maxy-120;
        int y_start=45;
       
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start+i*dist_x ,y_start);
        }
       
   
         y_start=70;
        int y_end=y-10;
       
       
       
       
        int dist_y=(y_end-y_start)/10;
        x_start=40;
   
        System.out.println("y_start= "+y_start);
        System.out.println("y_end= "+y_end);
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start ,y_start+i*dist_y);
        }
       
       
     x_start=80;
     y_start=70;    
       
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
            {
                String sir=String.valueOf( (char)('0'+this.graf.getEl(i,j)));
                g.drawString(sir,x_start+j*dist_x,y_start+i*dist_y);
            }
       
       
       
       
       
    }
   }


   public boolean deseneaza(Graph graf)
   {
this.graf=graf;
      repaint();
      return true;
   }

   }
///////////////////////clasa DeseneazaPanou1////////////////////

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


public class DeseneazaPanou extends JPanel
{
   boolean primaData;
   private int maxx;
   private int maxy;
   private Graph graf=null;

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


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


   public void paint(Graphics g)
   {
      super.paint(g);
      int x,y;

     
  
    if(graf==null)
    {
        g.drawLine(20, 50,maxx-50, 50);
       
       
        x=maxx-70;
       
        g.drawLine(60, 20,60,maxy-100);
        int x_start=80;
        int x_end=x-20;
        System.out.println("x_start= "+x_start);
        System.out.println("x_end= "+x_end);
       
        int dist_x=(x_end-x_start)/10;
       
       
        y=maxy-120;
        int y_start=45;
       
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start+i*dist_x ,y_start);
        }
       
   
         y_start=70;
        int y_end=y-10;
       
       
       
       
        int dist_y=(y_end-y_start)/10;
        x_start=40;
   
        System.out.println("y_start= "+y_start);
        System.out.println("y_end= "+y_end);
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start ,y_start+i*dist_y);
        }
       
       
     x_start=80;
     y_start=70;    
       
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
            {
                String sir="0";
                g.drawString(sir,x_start+j*dist_x,y_start+i*dist_y);
            }
       
    }
    else
    {
       
g.drawLine(20, 50,maxx-50, 50);
       
       
        x=maxx-70;
       
        g.drawLine(60, 20,60,maxy-100);
        int x_start=80;
        int x_end=x-20;
        System.out.println("x_start= "+x_start);
        System.out.println("x_end= "+x_end);
       
        int dist_x=(x_end-x_start)/10;
       
       
        y=maxy-120;
        int y_start=45;
       
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start+i*dist_x ,y_start);
        }
       
   
         y_start=70;
        int y_end=y-10;
       
       
       
       
        int dist_y=(y_end-y_start)/10;
        x_start=40;
   
        System.out.println("y_start= "+y_start);
        System.out.println("y_end= "+y_end);
       
        for(int i=0;i<10;i++)
        {
            String sir=String.valueOf((char)('A'+i));
             g.drawString(sir,x_start ,y_start+i*dist_y);
        }
       
       
     x_start=80;
     y_start=70;    
       
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
            {
                String sir=String.valueOf( (char)('0'+this.graf.getEl(i,j)));
                g.drawString(sir,x_start+j*dist_x,y_start+i*dist_y);
            }
       
    }
   }


   public boolean deseneaza(Graph graf)
   {
this.graf=graf;
      repaint();
      return true;
   }

   }
////////////////clasa Graph//////////////

public class Graph {

     private final int MAX_VERTS=20;
     private Vertex vertexList[]; //lista de varfuri
     private int adjMat[][]; //matricea de adiacenta
     private int nVerts; //nr curent de muchii
     private static int i;
   
     public Graph(int nrVf)
     {
       
       
         vertexList=new Vertex[MAX_VERTS];
         adjMat=new int[MAX_VERTS][MAX_VERTS];
       
         i=0;
         nVerts=nrVf;
       
       
         for(int i=0;i             for(int j=0;j                          adjMat[i][j]=0;
     }
   
     public void addVertex(char label)
     {
         vertexList[i++]=new Vertex(label);   
     }
   
     public void addEdge(int start,int end)
     {
        adjMat[start][end]=1;
        adjMat[end][start]=1;
       
     }
     public int getNrVf()
     {
         return this.nVerts;
     }
     public int [][] getMatr()
     {
         return this.adjMat;
     }
   
     public void displayVertex(int v)
     {
         System.out.println(vertexList[v]);
       
     }
   
     public int getEl(int x,int y)
     {
         return this.adjMat[x][y];
     }
}
//////////////////clasa MatriceAdiacenta////////
import javax.swing.*;

import java.awt.*;

public class MatriceAdiacenta extends JFrame implements Observer{

     private JPanel panouNord, panouVest, panouEst, panouSud;
     static DeseneazaPanou drawArea;
     private JLabel statusLabel;
   
   
    public MatriceAdiacenta(Subject sub)
    {
    super("Matrice adiacenta");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
        sub.registerInterest(this);
   
   
     panouNord = new JPanel();
     panouVest = new JPanel();
     panouEst = new JPanel();
     panouSud = new JPanel();
     drawArea = new DeseneazaPanou();
   
     statusLabel = new JLabel("Matrice de adiacenta");
     panouSud.add(statusLabel, BorderLayout.SOUTH);
    
     Container myContainer = getContentPane();
      myContainer.setLayout(new BorderLayout());
      myContainer.add(panouVest, BorderLayout.NORTH);
      myContainer.add(drawArea,BorderLayout.CENTER);
      //myContainer.add(new JScrollPane(drawArea), BorderLayout.CENTER);
      myContainer.add(panouVest, BorderLayout.WEST);
      myContainer.add(panouSud, BorderLayout.SOUTH);
      myContainer.add(panouEst, BorderLayout.EAST);
   
      this.setBackground(Color.WHITE);
    this.setBounds(400,400,400,400);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    }
   
   
     public void sendNotify(Graph graf)
     {
         drawArea.deseneaza(graf);
     }
   
}
///////////////clasa Observer//////////////////////

public interface Observer {

     public void sendNotify(Graph graf);
}
//////////////clasa Subiect////////////
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;


public class Subiect extends JFrame implements Subject {

   private     Vector observers;
   private JPanel panel1,panel2,panel3,panel;
   private JLabel label,lstart,lend;
   private JTextField editare,start,end;
   private JButton genereaza;
   private Box box;
   
   private Graph graf;
   private MatriceAdiacenta matr;
   private DesenareGraf desen;
  
    public Subiect(int nr_Vf)
    {
        super("Graf neorientat");
        observers=new Vector();
   
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
       
        graf=new Graph(nr_Vf);
       
        box=new Box(BoxLayout.Y_AXIS);
       
        panel1=new JPanel(new FlowLayout());
        panel2=new JPanel(new FlowLayout());
        panel3=new JPanel(new FlowLayout());
       
        label=new JLabel("Numarul de noduri: ");
        lstart=new JLabel("start:");
        lend=new JLabel("  end:");
       
        editare=new JTextField(5);
        editare.setBackground(Color.WHITE);
        editare.setHorizontalAlignment(JTextField.LEFT);
        editare.setEditable(false);
        editare.setText(Integer.toString(nr_Vf));
       
        start=new JTextField(10);
        start.setBackground(Color.WHITE);
        start.setHorizontalAlignment(JTextField.LEFT);
       
        end=new JTextField(10);
        end.setBackground(Color.WHITE);
        end.setHorizontalAlignment(JTextField.LEFT);
       
        panel1.add(label);
        panel1.add(editare);
       
        panel2.add(lstart);
        panel2.add(start);
       
        panel3.add(lend);
        panel3.add(end);
       
        box.add(panel1);
        box.add(Box.createVerticalStrut(30));
        box.add(panel2);
        box.add(panel3);
       
        Ascultator asc=new Ascultator();
       
        getContentPane().add(box);
       
        JPanel panel=new JPanel();
        genereaza=new JButton("Genereaza");
        genereaza.addActionListener(asc);
        panel1.add(genereaza,BorderLayout.SOUTH);
        getContentPane().add(panel1,BorderLayout.SOUTH);
       
        matr=new MatriceAdiacenta(this);
        desen=new DesenareGraf(this);
       
        setBounds(300,300,300,300);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
       
    }
   
    public class Ascultator implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("Genereaza"))
            {
                String s1,s2;
                s1=start.getText();
                start.setText("");
                s2=end.getText();
                end.setText("");
               
                int st,en;
                if(s1.length()>2||s2.length()>2 ||s1.length()==0 ||s2.length()==0)
                {
                    JOptionPane.showMessageDialog(null,"Date invalide","Mesaj",JOptionPane.ERROR_MESSAGE);   
                System.exit(1);
                }
                st=(Integer.parseInt(s1));
                en=(Integer.parseInt(s2));
                if(st>10||en>10)
                     System.exit(0);
               
                System.out.println("\nstart= "+st);
                System.out.print("end= "+en);
                graf.addEdge(st,en);
                notifyObservers();
               
               
               
            }
        }

    }
   
   
    private void notifyObservers()
    {
       
        for(int i=0;i            ((Observer)observers.elementAt(i)).sendNotify(graf);
       
    }
   
    public void registerInterest(Observer obs)
    {
        observers.addElement(obs);
    }
   
    public void removeInterest(Observer obs)
    {
    observers.remove(obs);   
    }

    public static void main(String[] args) {

   new Subiect(10);
    }

}
//////////////clasa Subject//////////

public interface Subject {

    public void registerInterest(Observer obs);
    public void removeInterest(Observer obs);
}
//////////////////clasa Vertex//////////////

public class Vertex {

        public char label; // label (e.g. 'A')
        public boolean wasVisited;

        public Vertex(char lab) // constructor
        {
       
            label = lab;
        wasVisited = false;
       
        }
        // sf clasei
}

Niciun comentariu:

Trimiteți un comentariu