Tutorial Java – Consulta de Registros combinando Navegación y JTable (Videos)


Tutorial Java

Cómo lo hacen en Java

Personalmente tengo la opinión de que: cuanto más formas de presentar la información dispongas en tu aplicación, mejor será la receptividad del usuario a interactuar abiertamente con el Sistema.

Debido a que no todas las personas son iguales y que cada uno tiene una percepción diferente de la realidad es importante preparar siempre diferentes versiones de una misma funcionalidad logrando así una aprovación de la mayoría de los usuarios.

Por eso hasta el momento te he mostrado  dos versiones de Consulta de Registros que puedes implementar en tu Aplicación Java Swing, la Consulta por Navegación de Registros y la Consulta de todos los registros con JTable.

En el video que te traigo hoy, la idea que tuve fue combinar ambas técnicas y presentarlas en un único formulario de consulta desde donde se podrán visualizar todos los registros a la vez, así como el registro seleccionado actualmente, evitando así tener que crear dos formularios diferentes.

Espero que al visualizar todo el video, puedas dejarme tu voto sobre la encuesta, y si no es mucho pedir también un comentario.

Parte 1/2

Parte 2/2

Lee esto antes de votar

Mi intención siempre es ayudarte creando los mejores artículos sean estos escritos o en videos para que realmente puedas Crear Aplicaciones en Java Swing, es por eso que para mejorar mis tutoriales necesito saber tu opinión sobre la encuesta que te dejo abajo.

Por favor, VOTA … !!! hazlo sólo una vez, no te va costar nada, además demora menos de un minuto, marca la respuesta considerando la siguiente idea:

Como ya habrás notado, los videos que voy creando siguen una secuencia lógica, es decir lo que acabaste de ver hoy depende de otros dos videos de consulta realizados antes, si no hiciste los ejercicios de antes tampoco podrás hacer éste.

Quisiera saber si que te parece de este estilo de publicación, bien o mal? lo estás siguiendo? de mi parte te explico que lo estoy haciendo así por el poco tiempo de video que permiten levantar en Youtube.

El hecho de hacer videos independientes para cada tema, resultaría en una duración más alta del video, ya que en cada video tengo que estar pasando la base de datos a crear, y también por que todo se tiene que empezar desde cero, pero igual, necesito saber tu opinion.

Desde ya, Gracias por tu Voto…!!!

Un cordial Saludo.

Marcos Jara

Esta entrada fue publicada en Uncategorized. Guarda el enlace permanente.

23 respuestas a Tutorial Java – Consulta de Registros combinando Navegación y JTable (Videos)

  1. william dijo:

    Hola Marcos…
    Nuevamente felicitaciones por tus tutoriales
    Una pregunta al intentar guardar un registro me sale el siguiente error:
    error For input string

    este es el codigo


    private JButton getBGuardar() {
      if (bGuardar == null) {
       bGuardar = new JButton();
       bGuardar.setBounds(new Rectangle(378, 47, 85, 30));
       bGuardar.setText("Guardar");
       bGuardar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
         System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
         try {
          Integer cod= Integer.parseInt(getTCodigo().getText());
          Integer codBuscado=(Integer)ControladorBD.buscarCampo("cargo","CodigoCargo",cod,"CodigoCargo");
          String sql=" ";
          String descripcion=getTDescripcion().getText();
        
         if (codBuscado==null) {//Aun no esta en la tabla
         sql="INSERT INTO cargo (CodigoCargo, Descripcion) VALUES (" + cod + ",'"+descripcion+"')";
        } else {//Ya esta en la Tabla
         sql="UPDATE cargo SET Descripcion ='"+ descripcion + "'WHERE CodigoCargo = " + cod;
        }
        
         ControladorBD.addSql(sql);
         ControladorBD.execute();
         getBDeshacer().doClick();
        } catch (Exception e2) {
         JOptionPane.showMessageDialog(null, "error" + e2.getMessage());
        e2.printStackTrace();
            }
        
        }
       });
      }
      return bGuardar;
     }

    y en la base me da este mensaje
    Conexion realizada con exito!!
    21/12/2010 06:49:08, @fa7e74, SELECT MAX(CodigoCargo) AS maximo FROM cargo ===> 11

    Por favor me puedes ayudar…
    actionPerformed()

    • Marcos Jara dijo:

      Hola Wiliam,

      Enviame siempre la traza completa de la Excepción que te apareció en la consola, por ahi es más facil descubrir el punto exacto donde dio el problema.

      Ahora sólo me imagino lo siguiente:

      Que al ejecutar dicho método, en el cuadro de texto de código no hay un valor numérico, por lo cual genera ese error de inputString.

      Tambien veo un detalle en tu comando UPDATE.
      sql=”UPDATE cargo SET Descripcion ='”+ descripcion + “‘WHERE CodigoCargo = ” + cod;

      Tienes que dejar un espacio despues de descripcion y Where, ya que cuando dicha expresión se evalue tu servidor va detectar como un comando SQL inválido.

      Avisame cualquier cosa o proveeme el log completo de la excepción para ayudarte.

      Saludos.

  2. william dijo:

    Gracias Marcos muy amable en responder….
    Revise lo del espacio entre la descripcion y el where y sigo teniendo el mismo problema..
    Te envio la traza completa, de antemano muchas gracias..

    actionPerformed()
    –>jdbc:mysql://localhost/financiero_dbo – root – root
    Conexion realizada con exito!!
    23/12/2010 10:53:43, @15b7986, SELECT * FROM cargo WHERE CodigoCargo > 0 ORDER BY CodigoCargo DESC LIMIT 0,1
    23/12/2010 10:53:45, @15b7986, SELECT * FROM cargo WHERE CodigoCargo = 11 ORDER BY CodigoCargo DESC LIMIT 0,1
    –>jdbc:mysql://localhost/financiero_dbo – root – root
    Conexion realizada con exito!!
    23/12/2010 10:53:45, @19616c7, SELECT MAX(CodigoCargo) AS maximo FROM cargo ===> 11
    actionPerformed()
    java.lang.NumberFormatException: For input string: “12 ”
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:456)
    at java.lang.Integer.parseInt(Integer.java:497)
    at AMBConsultaClientes$7.actionPerformed(AMBConsultaClientes.java:351)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

    • Marcos Jara dijo:

      Hola Wiliam.

      Trataré de explicarte de forma simples dónde y por qué se produce el problema.

      En realidad el problema salta al guardar, pero su origen se encuentra en el método que crea el Boton Nuevo getBotonNuevo(), en la linea siguiente:
      getTCodigo().setText((ultimoCodigo + 1)+ ” “);

      Para convertir un Integer a una String, debes utilizar comillas dobles sin espacios “”, tu utilizaste las comillas dobles, pero con un espacio en el medio ” “.

      La forma correcta sería getTCodigo().setText((ultimoCodigo + 1)+ “”);

      notas la diferencia?

      Ese pequeño detalle hace que al intentar convertir “12 ” a Integer genere java.lang.NumberFormatException: For input string: “12 ”

      Espero te haya ayudado.

      Saludos.

  3. william dijo:

    Y este es el programa completo

    import java.awt.BorderLayout;

    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.Rectangle;
    import java.awt.GridBagLayout;
    import javax.swing.JTextField;
    import java.awt.GridBagConstraints;
    import javax.swing.JLabel;

    import com.tutorialjava.bd.ControladorBD;

    import java.awt.Color;
    import java.awt.SystemColor;
    import java.awt.event.FocusEvent;
    import java.awt.Dimension;

    public class AMBConsultaClientes extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton botonPrimero = null;
    private JButton botonAnterior = null;
    private JButton botonSiguiente = null;
    private JButton botonUltimo = null;
    private JPanel jPanel = null;
    private JPanel jPanel1 = null;
    private JTextField tCodigo = null;
    private JTextField tDescripcion = null;
    private JLabel jLabel = null;
    private JLabel jLabel1 = null;
    private JButton bNuevo = null;
    private JButton bGuardar = null;
    private JButton bModificar = null;
    private JButton bEliminar = null;
    private JButton bDeshacer = null;

    /**
    * This is the default constructor
    */
    public AMBConsultaClientes() {
    super();
    initialize();
    }

    /**
    * This method initializes this
    *
    * @return void
    */
    private void initialize() {
    this.setSize(489, 234);
    this.setContentPane(getJContentPane());
    this.setTitle(“Mantenimiento de Cargos”);
    getBDeshacer().doClick();
    }

    /**
    * This method initializes jContentPane
    *
    * @return javax.swing.JPanel
    */
    private JPanel getJContentPane() {
    if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(null);
    jContentPane.add(getBotonPrimero(), null);
    jContentPane.add(getBotonAnterior(), null);
    jContentPane.add(getBotonSiguiente(), null);
    jContentPane.add(getBotonUltimo(), null);
    jContentPane.add(getJPanel(), null);
    jContentPane.add(getJPanel1(), null);
    jContentPane.add(getBNuevo(), null);
    jContentPane.add(getBGuardar(), null);
    jContentPane.add(getBModificar(), null);
    jContentPane.add(getBEliminar(), null);
    jContentPane.add(getBDeshacer(), null);
    }
    return jContentPane;
    }

    /**
    * This method initializes botonPrimero
    *
    * @return javax.swing.JButton
    */
    private JButton getBotonPrimero() {
    if (botonPrimero == null) {
    botonPrimero = new JButton();
    botonPrimero.setBounds(new Rectangle(23, 156, 55, 36));
    botonPrimero.setText(“<<");
    botonPrimero.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    String sql = "SELECT * FROM cargo ORDER BY CodigoCargo LIMIT 0,1";
    try {
    ControladorBD.addSql(sql);
    ControladorBD.execute();
    if (ControladorBD.finRecordSet()) {
    getTCodigo().setText(ControladorBD.getString ("CodigoCargo"));
    getTDescripcion().setText(ControladorBD.getString("Descripcion"));
    }

    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null,"Ocurrio un error en la BD"+ e2.getMessage());
    e2.printStackTrace();
    }
    }
    });
    }
    return botonPrimero;
    }

    /**
    * This method initializes botonAnterior
    *
    * @return javax.swing.JButton
    */
    private JButton getBotonAnterior() {
    if (botonAnterior == null) {
    botonAnterior = new JButton();
    botonAnterior.setBounds(new Rectangle(112, 156, 55, 36));
    botonAnterior.setText("<");
    botonAnterior.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    Integer cdActual = Integer.parseInt(getTCodigo().getText());

    String sql = "SELECT * FROM cargo WHERE CodigoCargo “);
    botonSiguiente.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    Integer cdActual = Integer.parseInt(getTCodigo().getText());

    String sql = “SELECT * FROM cargo WHERE CodigoCargo > ” + cdActual + ” ORDER BY CodigoCargo ASC LIMIT 0,1″;
    try {
    ControladorBD.addSql(sql);
    ControladorBD.execute();
    if (ControladorBD.finRecordSet()) {
    getTCodigo().setText(ControladorBD.getString (“CodigoCargo”));
    getTDescripcion().setText(ControladorBD.getString(“Descripcion”));
    }

    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null,”Ocurrio un error en la BD”+ e2.getMessage());
    e2.printStackTrace();
    }
    }
    });
    }
    return botonSiguiente;
    }

    /**
    * This method initializes botonUltimo
    *
    * @return javax.swing.JButton
    */
    private JButton getBotonUltimo() {
    if (botonUltimo == null) {
    botonUltimo = new JButton();
    botonUltimo.setBounds(new Rectangle(290, 156, 55, 36));
    botonUltimo.setText(“>>”);
    botonUltimo.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {

    Integer cdActual = Integer.parseInt(getTCodigo().getText());

    String sql = “SELECT * FROM cargo WHERE CodigoCargo > ” + cdActual + ” ORDER BY CodigoCargo DESC LIMIT 0,1″;
    try {
    ControladorBD.addSql(sql);
    ControladorBD.execute();
    if (ControladorBD.finRecordSet()) {
    getTCodigo().setText(ControladorBD.getString (“CodigoCargo”));
    getTDescripcion().setText(ControladorBD.getString(“Descripcion”));
    }

    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null,”Ocurrio un error en la BD”+ e2.getMessage());
    e2.printStackTrace();
    }
    }
    });
    }
    return botonUltimo;
    }

    /**
    * This method initializes jPanel
    *
    * @return javax.swing.JPanel
    */
    private JPanel getJPanel() {
    if (jPanel == null) {
    jLabel = new JLabel();
    jLabel.setBounds(new Rectangle(10, 30, 89, 16));
    jLabel.setText(“Código:”);
    jPanel = new JPanel();
    jPanel.setLayout(null);
    jPanel.setBounds(new Rectangle(15, 16, 344, 64));
    jPanel.setBackground(Color.lightGray);
    jPanel.add(getTCodigo(), null);
    jPanel.add(jLabel, null);
    }
    return jPanel;
    }

    /**
    * This method initializes jPanel1
    *
    * @return javax.swing.JPanel
    */
    private JPanel getJPanel1() {
    if (jPanel1 == null) {
    jLabel1 = new JLabel();
    jLabel1.setBounds(new Rectangle(9, 20, 107, 16));
    jLabel1.setText(“Descripción”);
    jPanel1 = new JPanel();
    jPanel1.setLayout(null);
    jPanel1.setBounds(new Rectangle(14, 89, 344, 53));
    jPanel1.setBackground(Color.lightGray);
    jPanel1.add(getTDescripcion(), null);
    jPanel1.add(jLabel1, null);
    }
    return jPanel1;
    }

    /**
    * This method initializes tCodigo
    *
    * @return javax.swing.JTextField
    */
    private JTextField getTCodigo() {
    if (tCodigo == null) {
    tCodigo = new JTextField();
    tCodigo.setBounds(new Rectangle(130, 24, 42, 25));
    tCodigo.setText(“0”);
    tCodigo.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusLost(FocusEvent e) {

    Integer cdActual = Integer.parseInt(getTCodigo().getText());

    String sql = “SELECT * FROM cargo WHERE CodigoCargo = ” + cdActual +

    ” ORDER BY CodigoCargo DESC LIMIT 0,1″;
    try {
    ControladorBD.addSql(sql);
    ControladorBD.execute();
    if (ControladorBD.finRecordSet()) {
    getTCodigo().setText(ControladorBD.getString (“CodigoCargo”));
    getTDescripcion().setText(ControladorBD.getString(“Descripcion”));
    }

    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null,”Ocurrio un error en la BD”+ e2.getMessage());
    e2.printStackTrace();
    }
    }
    });
    }
    return tCodigo;
    }

    /**
    * This method initializes tDescripcion
    *
    * @return javax.swing.JTextField
    */
    private JTextField getTDescripcion() {
    if (tDescripcion == null) {
    tDescripcion = new JTextField();
    tDescripcion.setBounds(new Rectangle(131, 11, 161, 26));
    tDescripcion.setDisabledTextColor(SystemColor.activeCaptionText);
    tDescripcion.setEditable(false);
    }
    return tDescripcion;
    }

    /**
    * This method initializes bNuevo
    *
    * @return javax.swing.JButton
    */
    private JButton getBNuevo() {
    if (bNuevo == null) {
    bNuevo = new JButton();
    bNuevo.setBounds(new Rectangle(379, 12, 85, 32));
    bNuevo.setText(“Nuevo”);
    bNuevo.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {

    setEstadoEdition(true);
    try {
    Integer ultimoCodigo= ControladorBD.maximoValorCampo(“cargo”, “CodigoCargo”);
    getTCodigo().setText((ultimoCodigo + 1)+ ” “);

    } catch (Exception e2) {

    }
    getTDescripcion().setEditable(true);
    getTDescripcion().setRequestFocusEnabled(true);
    getTDescripcion().setText(” “);
    }

    });
    }
    return bNuevo;
    }

    /**
    * This method initializes bGuardar
    *
    * @return javax.swing.JButton
    */
    private JButton getBGuardar() {
    if (bGuardar == null) {
    bGuardar = new JButton();
    bGuardar.setBounds(new Rectangle(378, 47, 85, 30));
    bGuardar.setText(“Guardar”);
    bGuardar.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    System.out.println(“actionPerformed()”); // TODO Auto-generated Event stub actionPerformed()
    try {
    Integer cod= Integer.parseInt(getTCodigo().getText());
    Integer codBuscado=(Integer)ControladorBD.buscarCampo(“cargo”,”CodigoCargo”,cod,”CodigoCargo”);
    String sql=” “;
    String descripcion=getTDescripcion().getText();

    if (codBuscado==null) {//Aun no esta en la tabla
    sql=”INSERT INTO cargo (CodigoCargo, Descripcion) VALUES (” + cod + “,'” + descripcion + “‘)”;
    } else {//Ya esta en la Tabla
    sql=”UPDATE cargo SET Descripcion = ‘” + descripcion + “‘WHERE CodigoCargo = ” + cod;
    }

    ControladorBD.addSql(sql);
    ControladorBD.execute();
    getBDeshacer().doClick();
    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null, “error” + e2.getMessage());
    e2.printStackTrace();
    }

    }
    });
    }
    return bGuardar;
    }

    /**
    * This method initializes bModificar
    *
    * @return javax.swing.JButton
    */
    private JButton getBModificar() {
    if (bModificar == null) {
    bModificar = new JButton();
    bModificar.setBounds(new Rectangle(379, 84, 87, 33));
    bModificar.setText(“Modificar”);
    bModificar.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    System.out.println(“actionPerformed()”); // TODO Auto-generated Event stub actionPerformed()
    setEstadoEdition(true);
    getTDescripcion().setRequestFocusEnabled(true);
    }
    });
    }
    return bModificar;
    }

    /**
    * This method initializes bEliminar
    *
    * @return javax.swing.JButton
    */
    private JButton getBEliminar() {
    if (bEliminar == null) {
    bEliminar = new JButton();
    bEliminar.setBounds(new Rectangle(379, 123, 90, 30));
    bEliminar.setText(“Eliminar”);
    bEliminar.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    System.out.println(“actionPerformed()”); // TODO Auto-generated Event stub actionPerformed()
    try {
    Integer cod= Integer.parseInt(getTCodigo().getText());
    String sql=”DELETE FROM cargo WHERE CodigoCiudad =”+ cod;
    ControladorBD.addSql(sql);
    ControladorBD.execute();
    } catch (Exception e2) {
    JOptionPane.showMessageDialog(null, “error” + e2.getMessage());
    e2.printStackTrace();
    }
    setEstadoEdition(false);
    getBotonAnterior().doClick();
    }
    });
    }
    return bEliminar;
    }

    /**
    * This method initializes bDeshacer
    *
    * @return javax.swing.JButton
    */
    private JButton getBDeshacer() {
    if (bDeshacer == null) {
    bDeshacer = new JButton();
    bDeshacer.setBounds(new Rectangle(379, 159, 91, 30));
    bDeshacer.setText(“Deshacer”);
    bDeshacer.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    System.out.println(“actionPerformed()”); // TODO Auto-generated Event stub actionPerformed()
    setEstadoEdition(false);
    getBotonUltimo().doClick();
    }
    });
    }
    return bDeshacer;
    }
    public void setEstadoEdition(boolean isEdicion) {

    getTCodigo().setEnabled(! isEdicion);
    getTDescripcion().setEnabled(isEdicion);
    getBotonPrimero().setEnabled(! isEdicion);
    getBotonAnterior().setEnabled(! isEdicion);
    getBotonSiguiente().setEnabled(! isEdicion);
    getBotonUltimo().setEnabled(! isEdicion);
    getBNuevo().setEnabled(! isEdicion);
    getBGuardar().setEnabled(isEdicion);
    getBModificar().setEnabled(! isEdicion);
    getBEliminar().setEnabled(! isEdicion);
    getBDeshacer().setEnabled(isEdicion);
    }

    } // @jve:decl-index=0:visual-constraint=”10,10″

  4. william dijo:

    Gracias Marcos… Muy agradecido.

    Que el 2011 sea un año lleno de bendiciones…..

    Saludos Cordiales..

  5. Isaac dijo:

    Hola Marcos …
    Sin palabras para agradecerte este gran aporte para el aprendizaje. ¡¡¡Felicitaciones!!!
    La pregunta es la sgte. ¿como pongo el nombre a las columnas del JTable?
    Saludos.

    • Marcos Jara dijo:

      Hola Isaac.

      Agradesco tu reconocimiento por el contenido del Sitio, justamente la idea es esa, aportar para el aprendizaje de todos aquellos que quieran crear aplicaciones Swing en ésta maravillosa tecnología.

      En relación a tu pregunta:

      En tu Modelo (Modelo del JTable) debes sobreescribir el método getColumnNames (creo que así se llama) del AbstractTableModel y ahi dentro hacer algo así:

      public String getColumnNames(int row){
      if (row == 0) return “Primera Columna”;
      if (row == 1) return “Segunda Columna”;
      if (row == N) return “N Columna”;
      }

      El siguiente video tutorial que estoy pensando hacer es justamente sobre JTable, y allí voy a mostrar los pasos.

      Un cordial Saludo.

      • Ivan Grandi dijo:

        Esta bien lo único que no es getColumnNames si no getColumnName, lo dejo por si le sirve a alguien mas.

        public String getColumnName(int columna){
        if (columna == 0) return “Codigo”;
        if (columna == 1) return “Ciudad”;
        return “”;
        }

        Nos vemos !

      • benjamin dijo:

        Gracias Marcos por la aclaración !!!

  6. Carlos dijo:

    Hola prof. Marcos segui el video y me ejecuto perfecto, pero no pude ponerle nombre a los campos en el jtable. Una vez mas felicitaciones por los videos es una gran ayuda para principiantes como yo. Si no es mucho pedir tambien me gustaria aprender como imprimir los datos de la base.

    Saludos gracias..

  7. Oscar Careaga dijo:

    rápido, bueno,eficaz y muy explicativo,… excelente prof. !! ahora intentare hacer un abm con la combinación de jTable y botones de navegación!! adelante!

  8. Julian Buitrago dijo:

    Excelente blog muy bien explicado todo, sin duda conoces muy bien java,

    Me gustaria saber en que parte puedo tener acceso a los codigos implantados en los tutoriales, o mas bien el codigo fuente de los ejemplos. estaria muy interesado en ello para asi poder tener mayor flexibilidad en nuestra practica.

    te agradezco de verdad por que son casi nulas las paginas o sitios en la que podemos encontrar este tipo de informacion tan bien detallada.

  9. jbesystem dijo:

    Hola, de nuevo Julian Buitrago

    Gracias de nuevo y hoy se me genera la siguiente duda.

    Mi JTable me muestra los valores perfectos pero mi inquietud es que necesito centrar los valores de una columna. Por decir algo, tengo tres columnas y la que quiero que centre el resultado la he llamado “Cantidad” que se encuentra en la posición 2 dentro del JTable.

    Agradezco de igual forma a Ivan Grandi por el aporte.

    Te agradezco de antemano tu pronta respuesta.

  10. jbesystem dijo:

    Hola, de nuevo Julian Buitrago

    Aprovechando y te dejo otra inquietud,

    Es de que si existe la posibilidad que ademas de poder centrar el contenido de una columna, yo pueda establecer el tamaño fijo de la columna, por ejemplo para mi caso tengo la colomna codigo donde los codigos no superan mas de 3 digitos, en la actualidad cuando ejecuto la aplicacion me aparece en un tamaño por default mucho mas grande de lo que desearia.

    Gracias de nuevo y agradezco su pronta respuesta a estas inquietudes.

  11. Elvio dijo:

    Hola Prof. necesito de tu ayuda, tengo este error cuando hago una busqueda interactiva a través de un campo de texto.
    mi metodo.
    private void txtfiltroCaretUpdate(javax.swing.event.CaretEvent evt) {

    int fil, col;
    //Limpia selección de la tabla
    Tabla.clearSelection();

    for(fil = 0; fil <= Tabla.getRowCount();fil++)
    {
    for(col = 0; col < Tabla.getColumnCount(); col++)
    {
    //Obtiene dato contenido en una celda de la tabla
    String value = (String)Tabla.getValueAt(fil, col);

    if(value.startsWith(txtfiltro.getText()) ||(value.equals(txtfiltro.getText())) )
    {
    //Selecciona celda si el texto es encontrado
    Tabla.changeSelection(fil, col, false, false);
    }
    }
    }

    // TODO add your handling code here:
    }

    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at clientes.modelojtablecliente.getValueAt(modelojtablecliente.java:57)
    at javax.swing.JTable.getValueAt(JTable.java:2686)
    at clientes.frmcliente.txtfiltroCaretUpdate(frmcliente.java:683)
    at clientes.frmcliente.access$900(frmcliente.java:17)
    at clientes.frmcliente$10.caretUpdate(frmcliente.java:378)
    at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:391)
    at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4387)
    at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4409)
    at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:782)
    at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1257)
    at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1153)
    at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1134)
    at javax.swing.text.DefaultCaret$Handler.insertUpdate(DefaultCaret.java:1702)
    at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
    at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
    at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
    at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
    at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
    at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
    at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1633)
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2886)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
    at java.awt.Component.processEvent(Component.java:6044)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
    at java.awt.Component.dispatchEventImpl(Component.java:4502)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    GENERACIÓN CORRECTA (total time: 8 seconds)

    • Marcos Jara dijo:

      Elvio

      La excepción lo dice claramente IndexOutOfBoundsException

      Creo que tu problema puede estar en el primer for
      for(fil = 0; fil <= Tabla.getRowCount();fil++)
      {

      Fijate que le estas colocando menor o igual, tiene que ser solo menor.

      for(fil = 0; fil < Tabla.getRowCount();fil++)
      {

  12. Jose Emigdio dijo:

    Hola Marco! Cada vez que veo tus videos aprendo algo nuevo! muy bueno !… Aun tengo una duda sobre los Jtable y su actualizacion , en tus videos realizas la consulta en sql y cargas los datos a la JTable colocando el consultarDatos(); dentro de la declaracion del JTable . pero como seria si quiere realizar esta consulta desde un boton ? Es decir que al cargar el sistema la JTable me aparesca sin ningun campo , y cuando relize click en el boton consultar se actalize la Jtable tomando los datos de la Base de datos… Eh intentando colocar el consultarDatos() dentro de la accion del Boton , pero el sistema realiza la consulta en sql (Aparece en la consula) sin embargo los datos no se cargan en la JTable..

    Podrias ayudarme con esto? mostrarme un codigo ejemplo o algo..

    Muchas Gracias!

  13. Leonardo dijo:

    Hola Marcos, queria consultarte si hay alguna funcion para que cuando seleccionas un registro se muestre automaticamente en el jTable. En tu ejemplo la tabla muestra del codigo 1 al 8 y si en el tCodigo ingresas 10 hay que bajar manualmente con el jScrollPane para ver el seleccionado. Si bien en este ejemplo no parece ser importante, pero cuando la tabla es muy grande es diferente.
    Saludos.

    • Leonardo dijo:

      Ya lo solucioné, por si a alguien mas le interesa, les dejo como lo hice, agregué estas dos lineas al final de actualizarJTable():

      Rectangle r = jTable.getCellRect(resultado, 0, rootPaneCheckingEnabled);
      jScrollPane1.getViewport().scrollRectToVisible(r);

      Saludos.

Responder

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