/*
Se realizará una pequeña aplicasiond e ejemplo en la que se mostrará como se programa una cola y como se usa.
*/
//package experimentos;//Si quieres activar esta linea debes meter el archivo en una carpeta llamada: experimentos.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
*
* @author Rafael Angel Montero Fernández.
*/
public class Colas
{
public static void main(String args[])
{
Form_cola frm=new Form_cola();
frm.show();
}//main
}//Class Colas
class Cola
{
private Nodo cola_de_nodos, recorrido=new Nodo();
private Nodo primero= null;
public Cola()
{
//cola_de_nodos=new Nodo();
}//Constructor
public Nodo sacar_el_primero_de_la_cola()
{
if(cola_de_nodos!=null)
{
primero= new Nodo(cola_de_nodos.getNombre(), cola_de_nodos.getFecha(), cola_de_nodos.getValor(), cola_de_nodos.getDetalles());
cola_de_nodos=cola_de_nodos.getSiguiente();//Removiendo el primero.
}//if
return primero;
}//sacar
//Mete un nodo al final de la fila.
public void meter_en_la_cola(Nodo nuevo_nodo_para_meterlo_al_final_de_la_cola)
{
Nodo nuevo_nodo_local=nuevo_nodo_para_meterlo_al_final_de_la_cola;//new Nodo(nuevo_nombre,numero, null);
if(cola_de_nodos==null)
{
System.out.println("En la raiz " + nuevo_nodo_local.getNombre());
cola_de_nodos=new Nodo( nuevo_nodo_local.getNombre(), nuevo_nodo_local.getFecha(), nuevo_nodo_local.getValor(), nuevo_nodo_local.getDetalles());
}//if
else
{
this.recorrido= cola_de_nodos;
while(this.recorrido!=null)
{
System.out.println("En la cola " );
if(recorrido.getSiguiente()!=null)
{
System.out.println("Sigueinte " + recorrido.getSiguiente().getNombre());
this.recorrido=recorrido.getSiguiente();
}//if
else
{
System.out.println("Enfilando " + nuevo_nodo_local.getNombre());
this.recorrido.setSiguiente(nuevo_nodo_local);//Si no es asi entonces, va dentro del while.
break;
}//else
}//while
System.out.println("Saliendo de while");
}//else
System.out.println("Saliendo del metodo.");
//cola_de_nodos=recorrido;
}//meter_en_la_fila
public Nodo getUltimo_en_la_cola()
{
recorrido=cola_de_nodos;
return this.getUltimo_en_la_cola(recorrido);
}//getUltimo_en_la_cola
private Nodo getUltimo_en_la_cola(Nodo toda_la_cola)
{
if(toda_la_cola!=null)
{
this.largo_de_la_cola=1;//Uno por la raís.
while(toda_la_cola.getSiguiente()!=null)
{
System.out.println(toda_la_cola.getSiguiente());
this.largo_de_la_cola++;
toda_la_cola=toda_la_cola.getSiguiente();
//this.getUltimo_en_la_cola(toda_la_cola);
}//while
}//if
//else
{
return toda_la_cola;//Se retorna el ultimo.
}//else
//return toda_la_cola;//Se retorna el ultimo.
}//getPrimero_en_la_cola
public Nodo getPrimero_en_la_cola()
{
if(cola_de_nodos!=null)
{
primero= new Nodo(cola_de_nodos.getNombre(), cola_de_nodos.getFecha(), cola_de_nodos.getValor(), cola_de_nodos.getDetalles());
}//if
return primero;
}//getPrimero_en_la_cola
private boolean la_cola_esta_bacia()
{
return this.cola_de_nodos==null;//Retorna true si la cola es null.
}//la_cla_esta_bacia
private int largo_de_la_cola=0;
public int getLargo_de_la_cola()
{
this.largo_de_la_cola=0;
this.getUltimo_en_la_cola();//Dentro de este metodo se mide el largo de la cola.
return largo_de_la_cola;//Pero se retorna aquí. Ya sabes polimorfismo.
}//getLargo_de_la_cola
}//class Cola
class Nodo
{
private String Nombre="", detalles="", fecha="";
private int valor=0;//Se incluye por si se quieré usar como clave.
private Nodo siguiente=null;
public Nodo(String nuevo_nombre, String nueva_fecha, int nuevo_valor, String nuevos_detalles)
{
setFecha(nueva_fecha);
setValor(nuevo_valor);
setDetalles(nuevos_detalles);
setNombre(nuevo_nombre);
}//Constructor sin parametros.
public void setFecha(String nueva_fecha)
{
this.fecha=nueva_fecha;
}//setFecha
public String getFecha()
{
return this.fecha;
}//getFecha
public void setValor(int nuevo_valor)
{
valor=nuevo_valor;
}//setValor
public int getValor()
{
return valor;
}//getValor
public void setDetalles(String nuevos_detalles)
{
this.detalles=nuevos_detalles;
}//setDetalles
public String getDetalles()
{
return this.detalles;
}//getDetalles
public void setNombre(String nuevo_nombre)
{
this.Nombre=nuevo_nombre;
}//setNombre
public String getNombre()
{
return this.Nombre;
}//getNombre
public Nodo()
{
this.siguiente=null;
}//Constructor sin parametros.
public void setSiguiente(Nodo nuevo_nodo)
{
this.siguiente=nuevo_nodo;
}//setSiguiente
public Nodo getSiguiente()
{
return this.siguiente;
}//getSiguiente
}//class Nodo
class Form_cola extends JFrame
{
private JLabel jlNombre=new JLabel("Nombre"), jlValor=new JLabel("Valor"), jlFecha=new JLabel("Fecha"), jlDetalles=new JLabel("Detalles");
private JTextField jtNombre=new JTextField(), jtValor=new JTextField(), jtFecha=new JTextField();
private Nodo un_nodo=new Nodo();
private Cola cola=new Cola();
private JTextArea jtaDetalles=new JTextArea();
private JScrollPane jspDetalles=null;
private JMenuBar jmbBarra=new JMenuBar();
private JMenu jmArchivo=new JMenu("Archivo"), jmVer=new JMenu("Ver"), jmAcciones=new JMenu("Acciones");
private JMenuItem jmiMeter_en_la_fila=new JMenuItem("Meter en la fila"), jmiSalir=new JMenuItem("Salir"), jmiVer_ultimo_en_la_cola=new JMenuItem("Ultimo en la cola"), jmiVer_primero_en_la_cola=new JMenuItem("Primero en la cola"), jmiSacar_el_primero_de_la_cola=new JMenuItem("Sacar el primero de la cola"), jmiVer_largo_de_la_cola=new JMenuItem("Largo de la cola");
private Eventos controlador_de_eventos=new Eventos(this);
public Form_cola()
{
super("Cola");
this.inicio();
//Datos de prueba
Nodo nuevo=new Nodo("Rafael", "25 de enero de 1978", 40, "Amo programar");
this.cola.meter_en_la_cola(nuevo);
nuevo=new Nodo("Yannia", "2001", 24, "Una persona que conocí a mis 24 años.");
this.cola.meter_en_la_cola(nuevo);
nuevo=new Nodo("Cola", "2018", 40, "Las colas o flujos de datos.\nEs una tecnica que conocí a la perfeccion en 2018.");
this.cola.meter_en_la_cola(nuevo);
}//Constructor
private void inicio()
{
this.setSize(230,290);
this.setLayout(null);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setResizable(false);
jspDetalles=new JScrollPane(jtaDetalles);
//Estableciendo el tamaño y posicion de los controles.
jlNombre.setBounds(5, 5, 100, 25);
jtNombre.setBounds(55, 5, 150, 25);
jlFecha.setBounds(5, 35, 100, 25);
jtFecha.setBounds(55, 35, 150, 25);
jlValor.setBounds(5, 65, 100, 25);
jtValor.setBounds(55, 65, 150, 25);
jlDetalles.setBounds(5, 100, 100, 25);
jspDetalles.setBounds(5, 125, 205, 100);
this.jtaDetalles.setBounds(5, 125, 205, 100);
//Añadiendo los controles.
this.getContentPane().add(this.jlNombre);
this.getContentPane().add(this.jlFecha);
this.getContentPane().add(this.jlValor);
this.getContentPane().add(this.jlDetalles);
this.getContentPane().add(this.jtNombre);
this.getContentPane().add(this.jtFecha);
this.getContentPane().add(this.jtValor);
this.getContentPane().add(this.jspDetalles);
//Añadiendo la barra de menu.
this.setJMenuBar(jmbBarra);
//Añadiendo el menu a la barra de menu.
jmbBarra.add(this.jmArchivo);
jmbBarra.add(jmVer);
jmbBarra.add(this.jmAcciones);
//Añadiendo los items de cada menu.
jmArchivo.add(jmiSalir);
jmAcciones.add(this.jmiMeter_en_la_fila);
jmAcciones.addSeparator();
jmAcciones.add(this.jmiSacar_el_primero_de_la_cola);
jmVer.add(this.jmiVer_largo_de_la_cola);
jmVer.addSeparator();
jmVer.add(this.jmiVer_primero_en_la_cola);
jmVer.add(this.jmiVer_ultimo_en_la_cola);
//Añadiendo los eventos.
jmiSalir.addActionListener(controlador_de_eventos);
this.jmiMeter_en_la_fila.addActionListener(controlador_de_eventos);
this.jmiSacar_el_primero_de_la_cola.addActionListener(controlador_de_eventos);
this.jmiVer_largo_de_la_cola.addActionListener(controlador_de_eventos);
this.jmiVer_primero_en_la_cola.addActionListener(controlador_de_eventos);
this.jmiVer_ultimo_en_la_cola.addActionListener(controlador_de_eventos);
}//inicio
private void setTextos(Nodo nuevo_nodo)
{
if(nuevo_nodo!=null)
{
this.jtNombre.setText(nuevo_nodo.getNombre());
this.jtFecha.setText(nuevo_nodo.getFecha());
this.jtValor.setText("" + nuevo_nodo.getValor());
this.jtaDetalles.setText(nuevo_nodo.getDetalles());
}//if
else
{
this.jtNombre.setText("");
this.jtFecha.setText("");
this.jtValor.setText("");
this.jtaDetalles.setText("");
}//else
}//getTextos
private Nodo getTextos()
{
this.un_nodo=new Nodo(jtNombre.getText(), jtFecha.getText(), Integer.parseInt(jtValor.getText()), jtaDetalles.getText());
return un_nodo;
}//getTextos
public void click_ver_ultimo_de_la_cola(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(jmiVer_ultimo_en_la_cola.getText())==true)
{
un_nodo=this.cola.getUltimo_en_la_cola();
this.setTextos(un_nodo);
}//if
}//click_ver_ultimo_de_la_cola
public void click_ver_primero_en_la_cola(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiVer_primero_en_la_cola.getText())==true)
{
un_nodo=this.cola.getPrimero_en_la_cola();
this.setTextos(un_nodo);
}//if
}//click_ver_primero_en_la_cola
public void click_ver_largo_de_la_cola(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiVer_largo_de_la_cola.getText())==true)
{
JOptionPane.showMessageDialog( null, "Largo de la cola: " + this.cola.getLargo_de_la_cola() );
}//if
}//click_ver_largo_de_la_cola
public void click_sacar_el_primero_de_la_cola(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiSacar_el_primero_de_la_cola.getText())==true)
{
un_nodo=this.cola.sacar_el_primero_de_la_cola();
this.setTextos(un_nodo);
}//if
}//click_sacar_el_primero_de_la_cola
public void click_salir(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiSalir.getText())==true)
{
System.exit(0);
}//if
}//click_salir
public void click_meter_en_la_cola(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiMeter_en_la_fila.getText())==true)
{
un_nodo= this.getTextos();
this.cola.meter_en_la_cola(un_nodo);
this.setTextos(null);
}//if
}//click_meter_en_la_fila
}//Form_cola
class Eventos implements ActionListener
{
//Este class es un controlador de eventos.
private Form_cola frm_cola=null;
public Eventos(Form_cola nuevo_form_cola)
{
this.frm_cola=nuevo_form_cola;
}//Constructor
@Override
public void actionPerformed(ActionEvent evt)
{
if(this.frm_cola!=null)
{
frm_cola.click_meter_en_la_cola(evt);
frm_cola.click_sacar_el_primero_de_la_cola(evt);
frm_cola.click_salir(evt);
frm_cola.click_ver_largo_de_la_cola(evt);
frm_cola.click_ver_primero_en_la_cola(evt);
frm_cola.click_ver_ultimo_de_la_cola(evt);
}//if
}//actionPerformed
}//Eventos