package GRAF;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class CanvasGraf extends Canvas {
private static final long serialVersionUID = 1L;
private int maxx;
private int maxy;
private Graf graf=null;
private static final double TWO_PI=2*Math.PI;
private int diametru;
private int raza;
private int x;
private int y;
public CanvasGraf()
{
setBackground(Color.white);
maxx = 400;
maxy = 400;
repaint();
}
public Dimension getPreferredSize()
{
return new Dimension(maxx, maxy);
}
public void paint(Graphics g)
{
this.diametru=300;
this.raza=this.diametru/2;
maxx=this.getWidth();
maxy=this.getHeight();
this.x=maxx/4;
this.y=maxy/5;
g.drawString("Centru",x+raza,y+raza);
// g.drawOval(x,y,diametru,diametru);
x+=raza;
y+=raza;
for(int i=0;i<10;i++)
{
double radians=(TWO_PI/10)*(i+1);
double sine=Math.sin(radians);
double cosine=Math.cos(radians);
int dxmax = x + (int)(raza * sine);
int dymax = y + (int)(raza * cosine);
int dim=30;
g.fillOval(dxmax-dim/2,dymax-dim/2, dim, dim);
String info=String.valueOf((char)('A'+i));
g.drawString(info,dxmax-25,dymax);
}
if(this.graf!=null)
{
System.out.println("aaa");
for(int i=0;i<10;i++)
for(int j=i+1;j<10;j++)
if(graf.Element(i,j)==1)
{
double radians=(TWO_PI/10)*(i+1);
double sine=Math.sin(radians);
double cosine=Math.cos(radians);
int dxmax = x + (int)(raza * sine);
int dymax = y + (int)(raza * cosine);
double radians1=(TWO_PI/10)*(j+1);
double sine1=Math.sin(radians1);
double cosine1=Math.cos(radians1);
int dxmax1 = x + (int)(raza * sine1);
int dymax1 = y + (int)(raza * cosine1);
g.drawLine(dxmax,dymax,dxmax1,dymax1);
}
}
}
public boolean deseneaza(Graf g) {
// TODO Auto-generated method stub
if(g!=null)
{
System.out.println("null");
}
this.graf=g;
repaint();
return true;
}
}
package GRAF;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class CanvasMatrice extends Canvas {
private static final long serialVersionUID = 1L;
private Graf graf=null;
private int maxx;
private int maxy;
public CanvasMatrice()
{
this.setBackground(Color.white);
maxx=400;
maxy=400;
repaint();
}
public void paint(Graphics g)
{
g.drawLine(20, 50, maxx-50, 50);
g.drawLine(60, 20, 60, maxy-100);
int x_start=80;
int x_end=maxx-90;
int dis_x=(x_end-x_start)/10;
int y_start=45;
for(int i=0;i<10;i++)
{
String s=String.valueOf((char)('A'+i));
g.drawString(s,x_start+i*dis_x, y_start);
}
y_start=70;
x_start=40;
int y_end=maxy-130;
int dis_y=(y_end-y_start)/10;
for(int i=0;i<10;i++)
{
String s=String.valueOf((char)('A'+i));
g.drawString(s,x_start, y_start+i*dis_y);
}
if(graf==null)
{
x_start=80;
y_start=70;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
String s="0";
g.drawString(s,x_start+i*dis_x, y_start+j*dis_y);
}
}
}
else
{
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.Element(i,j)));
g.drawString(sir,x_start+j*dis_x,y_start+i*dis_y);
}
}
}
public Dimension getPreferredSize()
{
return new Dimension(maxx,maxy);
}
public boolean desenaza(Graf graf) {
// TODO Auto-generated method stub
this.graf=graf;
repaint();
return true;
}
}
package GRAF;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DesenareGraf extends JFrame implements Observerr {
private static final long serialVersionUID = 1L;
private JLabel status;
private JPanel panou;
private CanvasGraf c;
public DesenareGraf(Subiect subiect) {
setTitle("Graf");
subiect.InregistrareObserver(this);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(600,600);
this.setLocationRelativeTo(null);
c=new CanvasGraf();
panou=new JPanel();
status=new JLabel("Desen Graf");
panou.add(status);
getContentPane().add(panou,BorderLayout.SOUTH);
getContentPane().add(c,BorderLayout.CENTER);
this.setVisible(true);
}
@Override
public void sendNotify(Graf graf) {
// TODO Auto-generated method stub
if(graf!=null)
this.c.deseneaza(graf);
}
}
package GRAF;
public class Graf
{
public static final int nrV=20;
public int mat[][];
public Varf Varfuri[];
public int nrVarfuri=0;
public int i=0;
public Graf(int nrV)
{
mat=new int[nrV][nrV];
Varfuri=new Varf[nrV];
i=0;
nrVarfuri=nrV;
for(int j=0;j<nrV;j++)
for(int i=0;i<nrV;i++)
{
mat[j][i]=0;
}
}
public void addVarf(char l)
{
Varfuri[i++]=new Varf(l);
}
public void addMuchie(int x,int y)
{
mat[x][y]=1;
mat[y][x]=1;
}
public int Element(int x,int y)
{
return mat[x][y];
}
public int[][] getMatrice()
{
return mat;
}
}
package GRAF;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MatriceAdiacenta extends JFrame implements Observerr {
private static final long serialVersionUID = 1L;
private JPanel panou;
private JLabel status;
private CanvasMatrice draw;
public MatriceAdiacenta(Subiect sub)
{
sub.InregistrareObserver(this);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(400, 400, 400, 400);
draw=new CanvasMatrice();
status=new JLabel("Matrice de adiacenta");
panou = new JPanel();
panou.add(status);
this.getContentPane().add(panou,BorderLayout.SOUTH);
this.getContentPane().add(draw,BorderLayout.CENTER);
this.setVisible(true);
}
@Override
public void sendNotify(Graf graf) {
if(graf!=null)
System.out.println("nooooot");
// TODO Auto-generated method stub
draw.desenaza(graf);
}
}
package GRAF;
public interface Observerr {
void sendNotify(Graf graf);
}
package GRAF;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observer;
import java.util.Vector;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Subiect extends JFrame {
public Vector observer;
private JPanel panel1,panel2,panel3;
private JLabel label,lstart,lend;
private JTextField editare,start,end;
private JButton genereaza;
private Box box;
private Graf graf=null;
private MatriceAdiacenta matr=null;
private DesenareGraf desen=null;
public Subiect(int varf)
{
graf=new Graf(varf);
observer=new Vector();
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(varf));
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);
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=start.getText();
String s2=end.getText();
start.setText("");
end.setText("");
int x=Integer.parseInt(s1);
int y=Integer.parseInt(s2);
if(s1.length()==0 || s2.length()==0 || x<0 || x>9 || y<0|| y>9)
{
JOptionPane.showMessageDialog(null, "Date invalide (varfuri 0-9)", "Date", JOptionPane.ERROR_MESSAGE);
}
else
{
graf.addMuchie(x, y);
notifyObservers();
}
}
}
}
@SuppressWarnings("unchecked")
public void InregistrareObserver(Observerr obs)
{
observer.addElement(obs);
}
public void notifyObservers() {
for(int i=0;i<observer.size();i++)
{
((Observerr) observer.elementAt(i)).sendNotify(this.graf);
}
}
@SuppressWarnings("unchecked")
public void RemovObserver(Observerr obs) {
observer.addElement(obs);
}
public static void main(String[] args) {
new Subiect(10);
}
}
package GRAF;
public class Varf {
private char eticheta;
private boolean vizitat;
public Varf()
{
}
public Varf(char a)
{
this.eticheta=a;
vizitat=false;
}
}
Niciun comentariu:
Trimiteți un comentariu