Package gui

Source Code of gui.GUI

package gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.Hashtable;

import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.JTableHeader;

import algoritmos.AlgoritmoAEstrella;
import algoritmos.AlgoritmoAnchura;
import algoritmos.AlgoritmoDijkstra;

import algoritmos.AlgoritmoProfundidad;
import algoritmos.AlgoritmoResolucion;


import tablero.*;
import traza.*;



/**
* Entorno gr�fico de la aplicaci�n
* @author Agust�n Medina Varo
* @version 0.1
*/
public class GUI  {
 
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private Tablero tablero;
 
  Font fuentePequenna = new Font("Serif", Font.ITALIC, 10);
    Font fuenteMediana= new Font("Serif", Font.ITALIC, 13);
    String palabraHorizontal="GATCA";
    String palabraVertical="AGGT";
    TrazaAlgoritmo traza;
    private String[] nombreAlgoritmos={"Algorimo profundidad","Algoritmo en anchura","Dijkstra","Algoritmo A*"};
    public  AlgoritmoResolucion  algResolucion;
   
    /**
     * Tama�o inicial de las casillas del tablero
     */
    public static final int TAMANNO_CASILLA_INICIAL=35;
 
    public int velocidad=200;
    public Thread trAlgoritmo;
   
   
  /**
   * Constructor
   * @param ventana Container principal de la aplicaci�n
   */
  public GUI(Container ventana){
 
   
    ventana.setLayout(new BorderLayout());
    
        ventana.add(panelMenu(),BorderLayout.NORTH);
        ventana.add(panelTablero(),BorderLayout.CENTER);
        ventana.add(panelDatosMostrados(),BorderLayout.EAST);
        traza=new TrazaAlgoritmo(tablero);
      algResolucion=new algoritmos.AlgoritmoProfundidad(this.traza,this.palabraHorizontal,this.palabraVertical);
      traza.cambiarAlgoritmo(algResolucion);
     
 
  }
 
  
   
   
   
    /**
     * Construye el men� de opciones de la aplicaci�n
     * @return Devuelve el Panel con todas las opciones de la aplicaci�n
     */
    private JPanel panelMenu(){
       
               
          JPanel panelSuperior=new JPanel();
          panelSuperior.setBorder(BorderFactory.createTitledBorder("Opciones de b�squeda"));
                         
          GroupLayout layout = new GroupLayout(panelSuperior);
          panelSuperior.setLayout(layout);
       
          // A�adimos huecos automaticamente entre componentes
          layout.setAutoCreateGaps(true);
          layout.setAutoCreateContainerGaps(true);
       
         
          //Etiquetas
          JLabel labelAlgoritmo = new JLabel("Algoritmo:");
          labelAlgoritmo.setFont(fuenteMediana);
         
          JLabel labelCoste = new JLabel("Funci�n de coste:");
          labelCoste.setFont(fuenteMediana);
         
          JLabel labelHeuristica = new JLabel("Funci�n heur�stica:");
          labelHeuristica.setFont(fuenteMediana);
         
          JLabel labelTamanno = new JLabel("Tama�o del tablero");
          labelTamanno.setFont(fuenteMediana);
         
          JLabel labelVelocidad = new JLabel("Velocidad");
          labelVelocidad.setFont(fuenteMediana);
         
          JLabel labelSliderTamannoPequenno=new JLabel("0.5x");
          labelSliderTamannoPequenno.setFont(fuentePequenna);
         
          JLabel labelSliderTamannoMediano=new JLabel("1x");
          labelSliderTamannoMediano.setFont(fuentePequenna);
         
          JLabel labelSliderTamannoGrande=new JLabel("2x");
          labelSliderTamannoGrande.setFont(fuentePequenna);
         
          JLabel labelSliderVelocidadLento=new JLabel("0x");
          labelSliderVelocidadLento.setFont(fuentePequenna);
         
          JLabel labelSliderVelocidadNormal=new JLabel("1x");
          labelSliderVelocidadNormal.setFont(fuentePequenna);
         
          JLabel labelSliderVelocidadRapido=new JLabel("4x");
          labelSliderVelocidadRapido.setFont(fuentePequenna);
         
          //Combos
          JComboBox comboAlgoritmo = new JComboBox(this.nombreAlgoritmos);
          comboAlgoritmo.setFont(fuenteMediana);
         
          comboAlgoritmo.addActionListener(new ActionListener(){
       

        @Override
        public void actionPerformed(ActionEvent e) {
          JComboBox cb = (JComboBox)e.getSource();
              cambiarAlgoritmo(cb.getSelectedIndex());
             
         
        }
      });
         
          JComboBox comboCoste = new JComboBox();
          comboCoste.setFont(fuenteMediana);
         
          JComboBox comboHeuristica = new JComboBox();
          comboHeuristica.setFont(fuenteMediana);
         
         
          //Botones
          JButton botonIniciar=new JButton("Iniciar");
          botonIniciar.setFont(fuenteMediana);
          botonIniciar.setContentAreaFilled(true);
         
          botonIniciar.addActionListener(new ActionListener(){
       

        @Override
        public void actionPerformed(ActionEvent arg0) {
          // TODO Auto-generated method stub
          iniciarAlgoritmo();
         
        }
      });
         
        
          JButton botonLimpiar=new JButton("Limpiar");
          botonLimpiar.setFont(fuenteMediana);
         
          botonLimpiar.addActionListener(new ActionListener(){
       

        @Override
        public void actionPerformed(ActionEvent arg0) {
          // TODO Auto-generated method stub
          traza.limpiarTablero();
         
        }
      });
         
         
         
         
          //Sliders
          JSlider sliderTamanno = new JSlider(JSlider.HORIZONTAL, 15, 55, 35);
                 
          //Creamos la tabla de etiquetas.
          Hashtable<Integer, JLabel> labelTableTamanno = new Hashtable<Integer, JLabel>();
         
          //Podr�amos usar im�genes
         
          labelTableTamanno.put(new Integer( 15 ),labelSliderTamannoPequenno);
                       //new JLabel(createImageIcon("images/stop.gif")) );
          labelTableTamanno.put(new Integer( 35 ),labelSliderTamannoMediano);
                       //new JLabel(createImageIcon("images/slow.gif")) );
          labelTableTamanno.put(new Integer( 55 ),labelSliderTamannoGrande);
                       //new JLabel(createImageIcon("images/fast.gif")) );
         
         
          //Configuramos las opciones de la tabla
          sliderTamanno.setLabelTable(labelTableTamanno);
          sliderTamanno.setMajorTickSpacing(10);
          sliderTamanno.setMinorTickSpacing(10);
          sliderTamanno.setPaintTicks(true);
          sliderTamanno.setPaintLabels(true);
          sliderTamanno.setSnapToTicks(true);
          sliderTamanno.setPreferredSize(new Dimension(175,0));
          sliderTamanno.setBorder(
                  BorderFactory.createEmptyBorder(0,0,10,0));
         
         
       
         
          sliderTamanno.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
              JSlider source = (JSlider)e.getSource();
               if (!source.getValueIsAdjusting()) {
                 cambiarTamanno(source.getValue());
               }
            }

       
          });
         
         
         
          JSlider sliderVelocidad = new JSlider(JSlider.HORIZONTAL, 0, 4, 2);
          //Creamos la tabla de etiquetas.
          Hashtable<Integer, JLabel> labelTableVelocidad = new Hashtable<Integer, JLabel>();
         
          //Podr�amos usar im�genes
         
          labelTableVelocidad.put(new Integer( 0 ),labelSliderVelocidadLento);
                       //new JLabel(createImageIcon("images/stop.gif")) );
          labelTableVelocidad.put(new Integer( 2 ),labelSliderVelocidadNormal);
                       //new JLabel(createImageIcon("images/slow.gif")) );
          labelTableVelocidad.put(new Integer( 4 ),labelSliderVelocidadRapido);
                       //new JLabel(createImageIcon("images/fast.gif")) );
         
         
          //Configuramos las opciones de la tabla
          sliderVelocidad.setLabelTable(labelTableVelocidad);
          sliderVelocidad.setMajorTickSpacing(1);
          sliderVelocidad.setMinorTickSpacing(1);
          sliderVelocidad.setPaintTicks(true);
          sliderVelocidad.setPaintLabels(true);
          sliderVelocidad.setSnapToTicks(true);
          sliderVelocidad.setPreferredSize(new Dimension(175,0));
          sliderVelocidad.setBorder(
                  BorderFactory.createEmptyBorder(0,0,10,0));
         
          sliderVelocidad.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
              JSlider source = (JSlider)e.getSource();
               if (!source.getValueIsAdjusting()) {
               
                 try {
              cambiarVelocidad((4-source.getValue())*500);
            } catch (InterruptedException e1) {
              // TODO Auto-generated catch block
              e1.printStackTrace();
            }
               }
            }
          });
         
         
          //Configuramos los grupos horizontales (componentes verticales de cada grupo visto en horizontal)
          layout.setHorizontalGroup(
                 layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup()
                        .addComponent(labelAlgoritmo)
                        .addComponent(labelCoste)
                        .addComponent(labelHeuristica)
                       
                    )
                    .addGroup(layout.createParallelGroup(Alignment.CENTER,false)
                        .addComponent(comboAlgoritmo)
                        .addComponent(comboCoste)
                        .addComponent(comboHeuristica)
                    )
                    .addGap(30)
                    .addGroup(layout.createParallelGroup(Alignment.CENTER,false)
                        .addComponent(labelTamanno)
                        .addComponent(sliderTamanno)
                       
                    )
                    .addGap(30)
                    .addGroup(layout.createParallelGroup(Alignment.CENTER,false)
                        .addComponent(labelVelocidad)
                       
                        .addComponent(sliderVelocidad)
                       
                    )
                    .addGap(30)
                    .addGroup(layout.createParallelGroup(Alignment.CENTER,false)
                        .addComponent(botonIniciar)
                       
                        .addComponent(botonLimpiar)
                       
                    )
                   
              );
        //Configuramos los grupos verticales (componentes horizontales de cada grupo visto en vertical)
          layout.setVerticalGroup(
                 layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                        .addComponent(labelAlgoritmo)
                        .addComponent(comboAlgoritmo)
                        .addComponent(labelTamanno)
                        .addComponent(labelVelocidad)
                        .addComponent(botonIniciar)
                    )
                    .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                        .addComponent(labelCoste)
                        .addComponent(comboCoste)
                        .addComponent(sliderTamanno)
                        .addComponent(sliderVelocidad)
                        .addComponent(botonLimpiar)
                    )   
                    .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                        .addComponent(labelHeuristica)
                        .addComponent(comboHeuristica))
              );
         

         
          return panelSuperior;
      }

   
     /**
      * Crea la zona de la representaci�n del espacio de estados del problema
      * @return Devuelve el panel donde se representar� el espacio de estados
      */
      private Container panelTablero(){
       
        JPanel panelPrincipal = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panelPrincipal.setBorder(BorderFactory.createTitledBorder("Espacio de estados"));
        panelPrincipal.setBackground(Color.white);
       
         //Instaciamos el tablero
        tablero = new Tablero(this.palabraHorizontal,this.palabraVertical,GUI.TAMANNO_CASILLA_INICIAL,true);
       
        panelPrincipal.add(tablero,"tablero");
       
        //Panel con scroll para poder ver todo el tablero en caso de que no quepa
        //en la zona de visualizaci�n
        JScrollPane panelPrincipalScroll=new JScrollPane(panelPrincipal);
        panelPrincipalScroll.setMinimumSize(new Dimension(500,300));
       
        return panelPrincipalScroll;
      }
     
     
      /**
       * Panel donde se muestran los datos estad�sticos de ejecuci�n
       * @return Devuelve el panel con las zonas donde se mostrar�n los datos de ejecuci�n del algoritmo seleccionado
       */
      private JPanel panelDatosMostrados(){
       
        //Etiquetas
       
        JLabel etiqueta2;
        JPanel  panelInf2;
          panelInf2 = new JPanel();
          panelInf2.setLayout(new GridLayout(0,1));
         
          panelInf2.setBorder(BorderFactory.createTitledBorder("Datos de ejecuci�n"));
        
        
          panelInf2.add(this.tablaAlgoritmoActual());
         // panelInf2.add(this.tablaAlgoritmoActual());
         
         
//          etiqueta2 = new JLabel("N�mero: ");
//          panelInf2.add(etiqueta2);
//         
//          etiqueta2 = new JLabel("124");
//          panelInf2.add(etiqueta2);
//         
//          etiqueta2 = new JLabel("M�xima :");
//          panelInf2.add(etiqueta2);
//         
//          etiqueta2 = new JLabel("1200MB");
//          panelInf2.add(etiqueta2);
//         
//          etiqueta2 = new JLabel("Memoria :");
//          panelInf2.add(etiqueta2);
//         
//          etiqueta2 = new JLabel("1000MB");
//          panelInf2.add(etiqueta2);
         
         
         
          panelInf2.setPreferredSize(new Dimension(400,1000));
         
        //  panelInf2.setMaximumSize(new Dimension(100,3000));
         
          return panelInf2;
        
         
     
      }
     
      public Component tablaAlgoritmoActual() {
        

        

        

          final JTable table = new JTable(new CustomTableModel());
         
          table.setPreferredScrollableViewportSize(new Dimension(800, 70));
          table.setFillsViewportHeight(true);

     
         // table.setEnabled(false);
          table.setRowSelectionAllowed(true);
         // table.setCellSelectionEnabled(false);
          //Implement table header tool tips.
        
          TrazaAlgoritmo.tablaEstadisticas=table;
          //Create the scroll pane and add the table to it.
          JScrollPane scrollPane = new JScrollPane(table);

          //Add the scroll pane to this panel.
          return scrollPane;
      }
     
    
     
      private void cambiarTamanno(int tamanno) {
       
       
        tablero.cambiarTamanno(tamanno);
      }
    
     
      private void cambiarVelocidad(int velocidad) throws InterruptedException{
       
       
        if (this.velocidad!=velocidad){
         
         
          this.traza.cambiarVelocidad(velocidad);
         
         
         
         
        }
      }
     
      private void iniciarAlgoritmo(){
//        if(this.trAlgoritmo.isAlive()){
//          this.trAlgoritmo=null;
//        }
        //algoritmos.Tiempo tr2=new algoritmos.Tiempo("auxi");
        this.traza.limpiarTablero();
       
        trAlgoritmo=new Thread(this.algResolucion);
        trAlgoritmo.start();
        //tr2.start();
       
      }
     
      @SuppressWarnings("unused")
    private void limpiarTablero(){
       
        this.tablero.limpiarTablero();
       
      }
     
      private void cambiarAlgoritmo(int indice){
       
        if(indice==0){
          this.algResolucion=new AlgoritmoProfundidad(this.traza,this.palabraHorizontal,this.palabraVertical);
        }
        else if(indice==1){
          this.algResolucion=new AlgoritmoAnchura(this.traza,this.palabraHorizontal,this.palabraVertical);
        }
        else if(indice==2){
          this.algResolucion=new AlgoritmoDijkstra(this.traza,this.palabraHorizontal,this.palabraVertical);
        }
        else if(indice==3){
          this.algResolucion=new AlgoritmoAEstrella(this.traza,this.palabraHorizontal,this.palabraVertical);
        }
       
        this.traza.cambiarAlgoritmo(this.algResolucion);
      }
 
}
TOP

Related Classes of gui.GUI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.