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
}
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
}
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