/**
 * @(#)MinmumSpaningTree.java
 *
 *
 * @author :- Alaa hamda
 * @version 1.00 2011/3/29
 */

import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MinmumSpaningTree2 extends JFrame implements ActionListener , MouseListener{
	
	
	String code_in_text="";
	JButton submit = new JButton("   submit    ");
	JPanel Showarr =new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
	JPanel Edgebutton=new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
	
	JPanel allLine =new JPanel(new BorderLayout());
	JPanel line2 =new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));
	
	JPanel line3 =new JPanel(new FlowLayout(FlowLayout.CENTER,20,20));
	
	JPanel part3=new JPanel(new BorderLayout()); 
	
	JPanel contener =new JPanel(new BorderLayout()); 
	JPanel c =new JPanel(new BorderLayout());
	JPanel c2 =new JPanel(new BorderLayout()); 
    JPanel c3 =new JPanel(new BorderLayout()); 
			    
	   int  arr [][]=new int  [4][4];
	   String code="";
       private JTextField[][] textfields;
       private JLabel[] Label1;
       private JLabel[] Label2;
       
        JPanel textFieldPanel=new JPanel(new GridLayout( 4,4)); 
        	 
       // JPanel JLabelNamevertix=new JPanel(new GridLayout(1,4)); 
        JPanel feildTextlNamevertix=new JPanel(new GridLayout(1, 4));
        	
       	JPanel Label_horzintal=new JPanel(new GridLayout(1, 4));  
        JPanel Label_vertical=new JPanel(new GridLayout(4,1));
       
        String s = "                                                      APPLET FOR Minmum Spaning Tree           ";
        JLabel title = new JLabel(s);
        
        
        private JLabel[] Namevertix;
        private JTextField[] TEXTNamevertix;
        
        
        JLabel numOFvertex=new JLabel("choose Number of vertix                           ");
        JLabel numOFvertex2=new JLabel("choose symbol of vertix you want ");
        JComboBox numofvertix=new JComboBox(new String[]{"4 VERTEX",
                "5 VERTEX", "6 VERTEX","7 VERTEX"});
        JButton showArr =new JButton (" Show the adjoint array ");
        JPanel line22 =new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
         JPanel frompart2=new JPanel(new BorderLayout(15,15));
         //JPanel frompart22=new JPanel(new BorderLayout());        
         JPanel part2=new JPanel(new BorderLayout(15,15));
        
        int numOfTextFields = 4;
        
        TextArea edgeComment=new TextArea(10,35);
      JButton edgeButton=new JButton("        Store edge in adjoint array         ");
        JButton RESTARTButton=new JButton("        RESTART        ");
       
       JLabel checklaple = new JLabel(" Enter 2 edge to check if them make a cycle in graph  ");
       JLabel vertix1=new JLabel("vertix 1");
       JLabel vertix2=new JLabel("vertix 2");
       JTextField TextVertix1 =new JTextField(6);
       JTextField TextVertix2 =new JTextField(6);
       JButton isMakeCycle=new JButton("        is make cycle           ");
       JButton checkOtharEdge=new JButton("        check Othar edge        ");
       
        
    public MinmumSpaningTree2() {
    	
    	setLayout(new BorderLayout(5,5));
    	this.setLocation(100, 100);
        this.setTitle("insertion applet ");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setSize(800, 700);
        Font f = new Font("SansSerif", Font.BOLD, 16);
        title.setBorder(new TitledBorder(""));
        title.setFont(f);
        
       // edgeComment.setBackground(new Color(240,238,240));
        edgeComment.setFont(f);
         
         
         drowlinePannel();
         //line22.add(new  JLabel("                                "));
         line22.add(numOFvertex);
         line22.add(numofvertix); 
        frompart2.add(line22,BorderLayout.NORTH);
        frompart2.add(numOFvertex2,BorderLayout.CENTER);
        frompart2.add(feildTextlNamevertix);
        
         Showarr.add(submit); 
        Showarr.add(showArr);
       
        part2.add(frompart2,BorderLayout.NORTH);
        part2.add(Showarr,BorderLayout.CENTER); 
         
         
         
         
         
         
         
        drow();
        
    	contener.add(Label_horzintal,BorderLayout.NORTH);
        contener.add(Label_vertical,BorderLayout.WEST);
    	contener.add(textFieldPanel,BorderLayout.CENTER);
    	
    	Edgebutton.add(edgeButton);
    	c.add(contener,BorderLayout.WEST);
    	c.add(edgeComment,BorderLayout.EAST);
    	c.add(Edgebutton,BorderLayout.SOUTH);
    	
    	line2.add(vertix1);
    	line2.add(TextVertix1);
    	line2.add(vertix2);
        line2.add(TextVertix2);
    	
    	line3.add(isMakeCycle);
    	line3.add(checkOtharEdge);
    		    	
    	allLine.add(checklaple,BorderLayout.NORTH);
        allLine.add(line2,BorderLayout.CENTER);
        allLine.add(line3,BorderLayout.SOUTH);
        
    	part3.add(c,BorderLayout.NORTH);
    	part3.add(allLine,BorderLayout.CENTER);
    	part3.add(RESTARTButton,BorderLayout.SOUTH);
    	
     	
    	add(title,BorderLayout.NORTH);
    	add(part2,BorderLayout.CENTER);
    //	add(part3,BorderLayout.SOUTH);
    	
    	edgeButton.addActionListener(this);
    	showArr.addActionListener(this);
    	checkOtharEdge.addActionListener(this);
    	isMakeCycle.addActionListener(this);
    	submit.addActionListener(this);
    	
     for (int i = 0; i < numOfTextFields; i++) {
   	    for (int A = 0; A < numOfTextFields; A++) {
    	textfields[i][A].addMouseListener(this);
   	    }}	
    	
    	
    	
    }
    
   
   public void actionPerformed(ActionEvent e) {
 if (e.getSource().equals(edgeButton)) {
        
        for (int i = 0; i < numOfTextFields; i++) {
   	    for (int A = 0; A <  numOfTextFields; A++) {
   	    
   	    
        	 
   	         arr[A][i]=Integer.parseInt(textfields[i][A].getText());	
   	         
   	    	}}}
       
if (e.getSource().equals(checkOtharEdge)) { 
       
          TextVertix1.setText("");      
           TextVertix2.setText("");  
        
        }
        
 if (e.getSource().equals(submit)) {
            if (numofvertix.getSelectedIndex() == 0) {
                numOfTextFields = 4;
            } else if (numofvertix.getSelectedIndex() == 1) {
                numOfTextFields = 5;
            } else if (numofvertix.getSelectedIndex() == 2) {
                numOfTextFields = 6;
            } else if (numofvertix.getSelectedIndex() == 4) {
                numOfTextFields = 7;
            }
        
        add(part3);    
       
   } 
        
   }    
    
    public void mouseClicked(MouseEvent e){}     
    public void mouseEntered(MouseEvent e) {}           
    public void mousePressed(MouseEvent e){}     
    public void	mouseReleased(MouseEvent e) {}
    public void	mouseExited(MouseEvent e) {
    	
     for (int i = 0; i < numOfTextFields; i++) {
   	 for (int A = 0; A <  numOfTextFields; A++) {	
    	if(e.getSource()==textfields[i][A]){
    		
    	textfields[A][i].setText(textfields[i][A].getText());
    	code_in_text+="\n the edge  "+valuof(A)+ valuof(i)+"  have the weight   "+ textfields[i][A].getText() ;
    		
    		
    	code_in_text+="\n the edge  "+valuof(i)+ valuof(A)+"  have the weight   "+ textfields[A][i].getText() ;
    	edgeComment.setText(code_in_text);		
    		
    	}
    	
    	}     
     }}
        
   
  public char  valuof(int v){
   	
      
   int s1=v+'A';
   char s=(char) s1;
  
   	 	return s; 
   	 	   
   }
   
   
   
/*   public void store_in_array(){
   	
   	 for (int i = 0; i <2; i++) {
   	 for (int A = 0; A < 2; A++) {
   	 
   	 arr[i][A]=Integer.parseInt(textfields[i][A].getText());
   	 arr[A][i]=Integer.parseInt(textfields[i][A].getText());	
   	 textfields[A][i].setText(textfields[i][A].getText());
   	 System.out.println("arr["+i+"]["+A+"]==+"+arr[i][A]+"arr["+A+"]["+i+"]=="+arr[A][i]);	
   	     }}
   	
   }
   */
   	 
   
   
   public void drowlableforNum(){
   	
   		Namevertix = new JLabel[ numOfTextFields];
    	
      for (int d = 0; d< Namevertix.length; d++) {
      	
        JLabel lablel = new JLabel("  Vertix "+d);
            Namevertix [d] = lablel;
            //JLabelNamevertix.add(lablel);
      
      
    }
   }
   
     public void drowtextforNum(){
   	
   		TEXTNamevertix = new JTextField[ numOfTextFields];
    	
      for (int d = 0; d< TEXTNamevertix.length; d++) {
      	
        JTextField lablel = new JTextField(6);
            TEXTNamevertix[d] = lablel;
            ///feildTextlNamevertix.add(lablel);
      
      
    }
   }
   public void drowlinePannel(){
   	drowlableforNum();
   	drowtextforNum();
   	for (int d = 0; d< TEXTNamevertix.length; d++) {
   	
  	feildTextlNamevertix.add( Namevertix [d] );
   	feildTextlNamevertix.add(TEXTNamevertix[d]);
  
   	
   	
   	}}
   
  public void format_array(){
   	
   	
   	 for (int i = 0; i < numOfTextFields; i++) {
   	 for (int A = 0; A <  numOfTextFields; A++) {
   	 	
      textfields[A][i].setText(textfields[i][A].getText()); 
      		     
   	        	
   }}
   }
 
    public static void main(String[] args) {
     MinmumSpaningTree2 minmumSpaningTree=new MinmumSpaningTree2();   
    }
    
    
    public  void drow(){
    	
    	textfields = new JTextField[ numOfTextFields][ numOfTextFields];
   	
   	for (int j = 0; j < textfields.length; j++) {
    	
        for (int i = 0; i < textfields.length; i++) {
        	
        	
            JTextField field = new JTextField(6);
           
            textfields[i][j] = field;
           	if(i==j){
   	   	 	 
   	        arr[i][j]=0;
   	       textfields[i][j].setText("0");
   	   }
            
            textFieldPanel.add(field);
        }}
        
         
          
    	Label1 = new JLabel[ numOfTextFields];
    	Label2 = new JLabel[ numOfTextFields];
    	Label_horzintal.add(new JLabel("     "));
      for (int d = 0; d< Label1.length; d++) {
      	
        JLabel lablel = new JLabel("    "+(char )(d+65)+"   ");
            Label1[d] = lablel;
            Label_horzintal.add(lablel);
      
      
    }   
     for (int f = 0; f < Label2.length; f++) {
      	
        JLabel label2 = new JLabel("    "+(char )(f+65)+"   ");
            Label2[f] = label2;
            Label_vertical.add(label2);
      
      
    } 	
    	
    } 	
    	
    	
    	
    	
    	
}
