Tutorial Java – Altas, Bajas y Modificaciones(Cambios) en Swing (Videos)


Tutorial Java

Cómo lo hacen en Java

Por fin, llego el momento en el cual vas a poder aprender a crear un formulario sencillo de Altas, Bajas y Modificaciones con Java Swing, asistiendo al tutorial que he preparado para tí cuidando todos los detalles.

Este tutorial, te explico ciento por ciento en video, para que lo puedas ver y repetir cuantas veces quieras, de forma a asimilar completamente su aprendizaje, repítelo al menos 3 veces cada video y luego hazlo tu mismo en tu computadora.

Realmente quiero animarte a que practiques estos ejercicios, si realmente quieres estar preparado para el campo laboral.

Ya sea que trabajes por tu propia cuenta o para una empresa de desarrollo es necesario que sepas hacer éste tipo de ejercicios básicos.

Si todavía no tomaste en serio éste tutorial en donde realmente te voy a enseñar a crear formularios con Java Swing, insisto, empieza a seguir los artículos desde el inicio, clic AQUI para ver el contenido completo del Tutorial Java.

Para entender éstos 3 videos y poder hacerlo en tu máquina necesitas crear la base de datos y haber realizado primero el formulario de Consulta por navegación de Registros.

En fin, aquí están y espero que lo disfrutes:

Parte 1/3

Parte 2/3

Parte 3/3

Baja desde AQUI la última versión del ControladorBD. 1.3

Tus comentarios son importantes.

Si te pareció bueno el Video Tutorial enviame un mensaje de agradecimiento

Así mismo escríbeme si te pareció que me olvide de algo importante o si me puedes ayudar para mejorar, (leo todos los mensajes)

Un cordial saludo…!

Marcos Jara

About these ads
Esta entrada fue publicada en Uncategorized y etiquetada , , , , , , , , , , . Guarda el enlace permanente.

38 respuestas a Tutorial Java – Altas, Bajas y Modificaciones(Cambios) en Swing (Videos)

  1. william dijo:

    Excelente tutorial, muchas gracias Marcos, por compartir tus conocimientos. Marcos no se puede descargar la última versión del ControladorBD. 1.3.

    Marcos tambien yo estaba realizando la aplicacion de carrito de compras con richfaces, muy buen tutorial.Por favor no te olvidez de publicar los ultimos videos que faltan.

    Muchas gracias Marcos, personas como tú son una bendición para los que estamos empezando en esta aventura de la programación.

    Saludos,
    William Granda
    Quito-Ecuador

    • Marcos Jara dijo:

      Hola Wiliam,

      Lo del carrito de compras en Struts2 está pendiente, ocurre que la grabación ya no salió bien, es por ello que quiero crear un nuevo tutorial, desde cero, pero terminando la aplicación.

      Solo quiero terminar primero este tutorial de java para el desarrollo de aplicaciones, luego crear un curso para dominar Java y luego si deseo seguir con esa parte que ya sería como Java Avanzado.

      En cuando tenga lo estaré disponibilizando

      Gracias y un cordial saludo.

  2. Diego Armando dijo:

    Hola!!!
    Sigo con mi implementación en NetBeans pero tengo un detalle con mi botón de Guardar ya que me menda el error “java.lang.Long cannot be cast to java.lang.Integer” cuando mi registro ya existe, mi consulta que puse en el else es la siguiente:
    sql=” UPDATE fija_telmex SET Cta_Maestra=’” + cm.getText() + “‘,Sub_Cta=’”+subc.getText()+”‘,Razon_Social=’”+uen.getText()+ “‘,” +”Servicio=’”+servicio.getText()+”‘,Ano_Fact=’”+año.getText()+”‘,Enero=’”+Float.parseFloat(mene.getText())+”‘,Febrero=’”+Float.parseFloat(mfeb.getText())+”‘,” +”Marzo=’”+Float.parseFloat(mmar.getText())+”‘,Abril=’”+Float.parseFloat(ma.getText())+”‘,Mayo=’”+Float.parseFloat(mmay.getText())+”‘,Junio=’”+Float.parseFloat(mj.getText())+”‘,” +”Julio=’”+Float.parseFloat(mjul.getText())+”‘,Agosto=’”+Float.parseFloat(mago.getText())+”‘,Septiembre=’”+Float.parseFloat(msep.getText())+”‘,Octubre=’”+Float.parseFloat(moct.getText())+”‘,” +”Noviembre=’”+Float.parseFloat(mnov.getText())+”‘,Diciembre=’”+Float.parseFloat(mdic.getText())+”‘,Acumulado_Anual=’”+acuman.getText()+”‘,Observaciones=’”+obs.getText()+”‘ WHERE idft=” + cod;

    YO QUIERO SUPONER Q ESTA EN MI VARIBLE codbuscado que la que se declara como entero segun el tutorial…. Espero me puedas auxiliar con el erro!!!

    Saludos!!!

    • Marcos Jara dijo:

      Hola Diego,

      Bueno en todo el código que me enviaste no encontré nada sobre Long, no entiendo por que te dio un error de Long, así que no creo que sea algo en ese código

      Puedes postear la traza completa del error.?

  3. Diego Armando dijo:

    Hola!!!
    Ya encontre la solución a esto era un espacio en mi consulta, solo que no consigo que me salga la parte de conectar mi tabla de mi base de datos con un JTable me sale error en:
    while(ControladorBD.finRecordSet()){

    String[] registro = (ControladorBD.getString(“ciudades”));
    //en esta parte me pone todo en rojo cuando doy en el circulo para ver el error
    me pone incompatible types required: java.lang.String[]

    }
    model.cantidad.add(registro);
    //y cuando implemento el model no me identifica a registro

    Deje solo ciudades para verificar si era solo un erro de escritura pero no es así que estoy haciendo mal espero puedas auxiliarme!!!1

    • Marcos Jara dijo:

      Hola Diego,

      Bueno…

      Creo que te olvidaste la forma de cómo inicializar un array, veo que estás haciendo con paréntesis.
      String[] registro = (ControladorBD.getString(“ciudades”));

      Por eso te marca como error…

      La forma correcta sería con llaves, así:
      String[] registro = {ControladorBD.getString(“ciudades”)};

      Saludos

  4. Diego Armando dijo:

    Tienes toda la razón mil gracias!!!!!!!
    :) Que tengas un increíble inicio de año
    Feliz 2011…

    Hay alguna opcion para importar archivos excel a mysql desde java, y vicerversa de mysql a excel???..

  5. Rex Ysmodes dijo:

    Ante todo mis mas cordiales saludos doc y agradecerte porque que sinceramente me he pasado horas y horas por no decir dias tratando de encontrar algun manual que me muestre lo que acabas de hacer, me da mucha alegria que compartas tus conocimientos con todos, acabo de terminar todo el manual y espero que sea el inicio =) ya que sinceramente me interesa programar en java. Bueno solo queda esperar que mas tienes para nosotros y por alli ya te molestaré con alguna duda o algun problema por resolver que tenga, saludos bro y gracias jejeje =P.

  6. Oscar Careaga dijo:

    Felicitaciones Marcos Excelente! una pregunta,.. podrías hacer unos ejemplos con comboBox, checkBox, radioButton con introducción a una BD, no se si es mucho pedirte! pero Muchas gracias por los vídeos! son buenísimos! y adelante con tu proyecto! desde ya gracias!

    • Marcos Jara dijo:

      Hola Oscar.

      Si, esa es la idea, ten por seguro que los voy a preparar

      He dejado de publicar por ahora debido a que me dí cuenta que a muchos que desean practicar éstos ejercicios de Base de Datos con Java Swing, les cuesta debido a que les falta aprimorar los principios de POO, por eso me estoy centrando en producir éste Curso, que saldrá dentro de poco.

      Apenas me libere seguiré subiendo artículos.

  7. Rex Ysmodes dijo:

    Hola Marcos, tengo un problema algo similar a unas preguntas atras, me sale el siguiente error cuando quiero actualizar mi registro ” java.lang.Long cannot be cast to java.lang.Integer”, lo solucioné haciendo la consulta sin utilizar el ControladorBD.buscarCampo(), pero como que esa no es la idea, cual podría ser el problema, el detalle a continuación, saludos.

    Codigo:
    btnSave.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    try {
    Integer cod = Integer.parseInt(getTxtCodigo().getText());
    Integer codBuscado = (Integer) ControladorBD.buscarCampo(“familia”, “fam_cod”, cod, “fam_cod”);
    String descripcion = getTxtDescripcion().getText();
    String sql = “”;

    if (codBuscado == null){
    sql = “INSERT INTO familia (fam_cod, fam_des) VALUES (“+ cod +”,’”+ descripcion +”‘)”;
    } else {
    sql = “UPDATE familia SET fam_des = ‘”+ descripcion +”‘ WHERE fam_cod = ” + codBuscado;
    }

    ControladorBD.addSql(sql);
    ControladorBD.execute();
    recuperarDatos();
    actualizarJTable();
    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null, “Ocurrió un error en la BD -> ” + e2.getMessage());
    e2.printStackTrace();
    }

    //Mandar a presionar el boton Deshacer
    getBtnCancel().doClick();
    }
    });

    Error:
    20/01/2011 12:24:27, @eb7859, SELECT fam_cod AS campoRecuperar FROM familia WHERE fam_cod=8
    ===> 8
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
    at maestros.MntoFamilias$7.actionPerformed(MntoFamilias.java:386)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    20/01/2011 12:24:31, @117a8bd, SELECT * FROM familia ORDER BY fam_cod DESC LIMIT 0,1
    20/01/2011 12:24:35, @117a8bd, SELECT * FROM familia WHERE fam_cod = 8 ORDER BY fam_cod DESC LIMIT 0,1
    20/01/2011 12:25:33, @117a8bd, SELECT * FROM familia WHERE fam_cod = 8 ORDER BY fam_cod DESC LIMIT 0,1

    • Marcos Jara dijo:

      Hola Rex,

      El error parece ser otro lado,

      Que hay en esta linea de tu codigo?
      MntoFamilias.java:386

      Ahi es donde acusa.

      Estas usando la version 1.3 del controlador verdad?

      • Rex Ysmodes dijo:

        Si estoy usando el 1.3, la linea que indica es la siguiente:

        Integer codBuscado = (Integer) ControladorBD.buscarCampo(“familia”, “fam_cod”, cod, “fam_cod”);

        Lo raro es que con el ejemplo que tu muestras no hay problema, pero cuando quiero hacer la consulta con mi BD me muestra el problema.

        Esta es mi tabla:
        CREATE TABLE `familia` (
        `fam_cod` int(10) unsigned NOT NULL auto_increment,
        `fam_des` varchar(50) NOT NULL,
        PRIMARY KEY (`fam_cod`)
        ) ENGINE=InnoDB ;

        saludos,

  8. Carlos Andrade dijo:

    Hola Marcos, ante todo gracias por tus videos.
    Hice un ABM como el del ejemplo pero visualizo los registros en un jtable como lo explicaste en el otro video.
    El problema que tengo es que cuando agrego, modifico o elimino algun registro no se como actualizar el jtable.
    Estuve leyendo algo y veo muchos usan defaulttablemodel y no abstracttablemodel.
    Agradeceré algun consejo.

  9. david dijo:

    Exelente son tus tutoriales prof. sinceramente tenes mucho conocimiento y te agradesco
    inmensamente ya que tenes predisposision para enseñar.. y todos los que estamos empezando nos cuesta bastante para aprender..pero con estos tutoriales se aprende rapido..GRACIAS..!!!

  10. Elvio dijo:

    Hola Prof. el controlador DB acepta sintaxis de procedimientos almacenados?

    • Marcos Jara dijo:

      Hola Elvio,

      Bueno si te refieres a llamar procedimientos almacenados, SI está preparado, ya que eso se realiza con comandos SELECT no es cierto?

      Bueno, ya dependerá de con que Base de datos vas a trabajar o que tipos de comandos específicos con los que quieres ejecutar.

      En la API existe una validación que realiza para aceptar sólo comandos SELECT, UPDATE, DELETE e INSERT, pero ésta parte se puede modificar para aceptar más comandos.

      Saludos.

  11. fer dijo:

    Muchas gracias, me ha sido de gran ayuda.

    Saludos desde España.

  12. fidias dijo:

    Buenas noches profe marcos;

    Resulta que cundo estoy guardando después de ingresar una ciudad me aparece el error este

    Exception in thread “AWT-EventQueue-0″ java.lang.NumberFormatException: For input string: “6 ”

    y e visto el vídeo como 10 veces el día de hoy y no logro encontrar el error yo pienso que esta en la sentencia sql del INSERT por que el UPDATE funciona bien aquí le dejo el código para que me pueda ayudar

    Integer cod = Integer.parseInt( getTextcodigo().getText() );
    Integer codBuscar = (Integer) ControladorBD.buscarCampo(“ciudades”, “ciu_codigo” , cod , “ciu_codigo”);
    String sql= ” “;
    String descripcion = getTextdescripcion().getText();
    if (codBuscar == null) {//aun no esta en la ta
    sql= “INSERT INTO ciudades (ciu_codigo, ciu_descripcion) VALUES(” + cod + “, ‘” + descripcion + “‘)”;
    } else {//ya esta en la tabla
    sql = “UPDATE ciudades SET ciu_descripcion = ‘” + descripcion + “‘ WHERE ciu_codigo = ” + cod ;
    }

    • Marcos Jara dijo:

      Hola

      El error es NumberFormatException, así que me imagino que el error esta en la primera línea
      Integer cod = Integer.parseInt ( getTextcodigo().getText());

      por que es allí donde estas tratando de convertir una letra a un número

      Veo tambien que el error dice For Input string “6 “, es decir hay un espacio despues del 6. y eso es lo que está causando la excepción.

      Las excepciones no estan controladas en el ejemplo, por que están hechas bien básicas para que despues los que hacen las puedan ampliar.

      Pero tu puedes solucionar el problema agregandole un trim al getText, asi
      Integer cod = Integer.parseInt ( getTextcodigo().getText().trim());

      Igualmente te conviene tratar la excepción para prevenir otros errores, asi como te explique en el comentario anterior.

      Saludos.

  13. Daniel Mancera dijo:

    Yo tenia el mismo problema de buscarcampo y lo que hice fue
    cambiar el cast y mejor use parseint y funciono.
    Esto cambiar:
    Integer codBuscar = (Integer) ControladorBD.buscarCampo(“ciudades”, “ciu_codigo” , cod , “ciu_codigo”);
    por esto:
    Integer codBuscar = Integer.parseInt(ControladorBD.buscarCampo(“ciudades”, “ciu_codigo”, cod, “ciu_codigo”).toString());
    Saludos!
    Gracias Marcos Jara, esta excelente la librería

  14. Ricardo dijo:

    Hola marcos, te cuento que ya terminé de hacer un ABM siguiendo los videos, para un proyecto que estoy desarrollando! Muchas gracias.por todo lo que haces, me ha servido muchísimo y por sobre todo me ha empujado a encarar dicho proyecto, de verdad eres admirable..
    Una consulta, será que en los próximos vídeos nos podrías mostrar como hacer un formulario cabecera-detalle que es lo que ahora necesito para continuar, ah y también mostrarnos como hacer reportes.
    Un abraso y mil gracias.

  15. Ricardo dijo:

    Hola marcos necesito de tu ayuda, realice un abm de proveedores e implemente dentro del mismo un jcombobox estático para el estado y un jcombobox dinámico para el país, a la hora de insertar y modificar sin problemas porque seguí lo del tutorial pero al navegar no tengo idea de como cargar los combobox con los valores de la base de datos.
    Te paso el código de mi botón guardar.
    try{
    Integer cod = Integer.parseInt(getTCodigo().getText());
    Object codBuscado = ControladorBD.buscarCampo(“proveedor”, “cod_proveedor”, cod, “cod_proveedor” );

    //Recupera el estado del JComboBoxEstado.
    Integer indice = getJComboBoxEstado().getSelectedIndex();
    String a = getArrayEstado()[indice];
    String estado = “”;

    if (a.equals(“Activo”)){
    estado = “A”;
    }else{
    estado = “I”;
    }

    //Recupera el codigo de pais del JComboPais.
    Pais pa = (Pais)getJComboPais().getSelectedItem();
    Integer codPais = pa.getCodigo();

    String sql = “”;
    String descripcion = getTDescripcion().getText();
    String direccion = getTDireccion().getText();
    String telefono = getTTelefono().getText();

    if (codBuscado == null){ //Aun no esta en la tabla.

    if ((descripcion.equals(“”)) ){ //Obliga a cargar la descripcion
    JOptionPane.showMessageDialog(null, “Debe ingresar la descripción.”);

    }else{
    sql = “INSERT INTO proveedor (cod_proveedor, descripcion_proveedor, direccion_proveedor, telefono_proveedor, estado, cod_pais) ” +
    “VALUES (” + cod + “, ‘” + descripcion + “‘, ‘” + direccion + “‘, ‘” + telefono + “‘, ‘” + estado + “‘, ” + codPais + “)”;
    //JOptionPane.showMessageDialog(null, “La inserción se realizó con éxito.”);
    }
    }else { //Ya esta en la tabla.
    sql = “UPDATE proveedor SET descripcion_proveedor = ‘” + descripcion +”‘, direccion_proveedor = ‘”+ direccion +
    “‘, telefono_proveedor = ‘”+ telefono + “‘, estado = ‘” + estado + “‘, cod_pais = “+ codPais +” WHERE cod_proveedor = ” + cod;
    //JOptionPane.showMessageDialog(null, “La modificación se realizó con éxito.”);
    }

    ControladorBD.addSql( sql );
    ControladorBD.execute();

    getBDeshacer().doClick();

    }catch (Exception e2){
    JOptionPane.showMessageDialog(null, “Error en la BD, ” + e2.getMessage());
    e2.printStackTrace();
    }

    Como te había dicho mi problema está a la hora de navegar en los registros desde el formulario, no se como cargar los valores para los combobox, espero y me puedas ayudar y desde ya gracias.

    • Ricardo dijo:

      profe ya pude navegar por los registros y que se cargue el jcombobox dinámico en su video tutorial explica como cargar el combo dinamico, ahora lo que no estoy logrando es cargar el combobox estático con los valores de la bd.. espero me puedas ayudar, gracias de antemano.

      • Marcos Jara dijo:

        Ricardo .

        Desde el momento que utilizas datos de la base de datos para mostrar en el combo ya estamos hablando de Combo Dinamico,

        Sigue simplemente los pasos para crear el combo dinamico.

  16. freddy dijo:

    Buenas marcos…

    Este etngo un problema con

    Integer cod = Integer.parseInt( getTxtCodigo().getText());

    Type mismatch: cannot convert from int to Integer

    tuve en mismo error en el boton nuevo y hice esto

    try {
    Integer ultimoCodigo = ControladorBD.maximoValorCampo(“ciudades”, “ciu_codigo”);
    int a = ultimoCodigo.intValue();
    getTxtCodigo().setText( (a + 1) + “”);

    PEro ahora nose como areglar el

    Integer cod = Integer.parseInt( getTxtCodigo().getText());

    Type mismatch: cannot convert from int to Integer
    me da error

    • Marcos Jara dijo:

      Hola Freddy

      El error te esta apareciendo probablemente en estas lineas

      Integer ultimoCodigo = ControladorBD.maximoValorCampo(“ciudades”, “ciu_codigo”);

      Verifica por favor si estas utilizando la version del Java 5 (1.5) o superior

      En versiones anteriores, necesitas hacer un casting o conversion especifica, prueba haciendo lo siguiente.:

      Integer ultimoCodigo = new Integer( ControladorBD.maximoValorCampo(“ciudades”, “ciu_codigo”) ) ;

  17. Miguel dijo:

    No esta mas nadie en este post?? Tengo una duda!!!

  18. Miguel dijo:

    Como hago para recuperar un varchar de mi base de datos, cree una tabla empresa_servicio que contiene estos campos:
    id int (15)
    nombre varchar(30)
    RUC varchar (15)
    direccion varchar (30)
    tel_fijo varchar(15)
    tel_movil varchar(15)
    en el momento de darle un INSERT cuando quiero agregar en mi formulario un nro x ejemplo el RUC: 3.408.562 – 9, en mi formulario solo me aparece el nro 3 y lo demas no!!
    Pero en mi base de datos me guarda bien!! Implemente estos codigos:
    String nombre = getTNombre().getText();
    String ruc = getTRuc().getText();
    String direccion = getTDireccion().getText();
    String tel1 = getTtel1().getText().toString();
    String tel2 = getTtel2().getText().toString();
    Pero no me funciona!! Solo con los numericos!! El resto me funciona!!
    Prof me podria dar la solucion??
    O alguien q sepa??
    Gracias!!

  19. Miguel dijo:

    Que lastima que esta pagina ya caduco!!

  20. Miguel dijo:

    Y nadie responde a mis dudas!! Tengo un proyecto grande para hacer pero creo que mejor lo hago con mapeos y hibernate!! Con sql es mas complicado creo!! Mas aun al modificar mis tablas de la base de datos!!

  21. Gustavo dijo:

    Un cordial saludo Marcos.
    Eres muy amable por compartir tu conocimiento y por el tiempo que le dedicas a hacer cada cosa. Hace mucho tiempo habia querido encontrar un tutoriall como este. Muy bien explicado.
    Hoy entre y ya lo comparti con dos de mis compañeros de estudio y lo recomendare a todo el que me pregunte sobre Java.
    Mil y mil gracias.
    Gustavo desde Bogotá

  22. Washington dijo:

    Saludos
    excelente, estoy iniciando en la utilizacion de java, un favor no se si hay un video donde pueda aprender hacer operaciones crdu con jtable
    Con atento saludo

  23. Carlos dijo:

    Buenas.

    Donde puedo descargar la última versión del ControladorBD. 1.3

    Gracias y disculpe las molestias

  24. Martín dijo:

    Hola Marcos
    Muchas gracias por estos increíbles videos tutoriales. Andaba buscando algo así hace tiempo. He llevado un curso de programación Java pero solo vimos la parte introductoria y lo que me interesa es llegar a desarrollar aplicaciones comerciales de escritorio y veo que tus videos son muy prácticos. Lo de Swing solo lo vimos superficialmente pero ahora veo lo potente que puede resultar para el desarrollo de una aplicación. Un abrazo desde Perú y nuevamente muchas gracias por tu desinteresado aporte.
    Si pudieras recomendarme algún material adicional para conocer más de Swing, te lo voy a agradecer.
    Martín

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s