Cómo seleccionar una fila de un JTable de Java

Iniciado por soy_nicanor, 19 Enero 2015, 00:48 AM

0 Miembros y 1 Visitante están viendo este tema.

soy_nicanor

Quiero seleccionar datos de la tabla con teclas de navegación y a la ves buscar en la caja, así como se ve en este imagen:
Ejemplo:


Encontré este pagina pero no puedo adaptarlo en mi código:
http://jedicerocool.blogspot.com/2011/01/como-seleccionar-una-fila-de-un-jtable.html#.VLxGIdJhkrT

Código Java:
Código (java) [Seleccionar]

String ele = txtElemento.getText();

       for (int i = 0; i < tbComponentes.getRowCount(); i++) {
           if (tbComponentes.getValueAt(i, 1).equals(ele)) {
               tbComponentes.changeSelection(i, 1, false, false);
               break;
           }
       }


Como podría hacerlo funcionar, estoy sacando datos de mysql en una tabla.

Mod: Movido a Java

Usuario Invitado

Para lo primero se me ocurre algo así:

Código (=java) [Seleccionar]

// Listen for changes in the text
textField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
    searchCoincidences();
  }

  public void searchCoincidences() {
    String text = textField.getText();
    for (int count = 0; count < model.getRowCount(); count++)
    {
      if(model.getValueAt(count, 0).toString().indexOf(text) != -1)
      {
        hightlightRow(count);
      }
    } // [end for]
  } // [end method]

});

public void highlightRow(rowIndex)
{
  // tienes que aplicar un table rendering para cambiar el color de la fila
}


Para lo segundo, lee un poco sobre eventos de teclado y lo conseguirás.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

soy_nicanor

Que significa esto, Que va aquí:

Código (java) [Seleccionar]

hightlightRow(count);

Usuario Invitado

Dicho método recibe el índice de la fila donde se ha encotrado coincidencias con el texto buscado. Una vez pasado el número de fila, el método se encarga de resaltar la fila por medio de un rendering.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

soy_nicanor

Lo estoy desarrollando en Netbeans
El código lo tengo en el botón Buscar:
No me funciona

Código (java) [Seleccionar]

package borrar3;
import javax.swing.table.DefaultTableModel;
import BD.Conexion;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.sql.*;
import javax.swing.JOptionPane;

public class Formulario extends javax.swing.JFrame {
   DefaultTableModel modelo;

   /** Creates new form Formulario */
   public Formulario() {
       initComponents();
       
   }


Código (java) [Seleccionar]

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       
       String valor = jTextField1.getText();

       String[] titulos = {"ID", "Codigo", "Articulo", "cantidad", "precio S/:"};
       String[] registro = new String[5];
       String sSQL = "";
       modelo = new DefaultTableModel(null, titulos);

       Conexion mysql = new Conexion();
       Connection cn = mysql.Conectar();

       sSQL = "SELECT id, codigo, articulo, cantidad, precio FROM articulos " +
               "WHERE CONCAT(codigo, ' ',articulo) LIKE '%"+valor+"%'";
       try
       {
           Statement st = cn.createStatement();
           ResultSet rs = st.executeQuery(sSQL);

           while(rs.next())
           {
               registro[0] = rs.getString("id");
               registro[1] = rs.getString("codigo");
               registro[2] = rs.getString("articulo");
               registro[3] = rs.getString("cantidad");
               registro[4] = rs.getString("precio");
               modelo.addRow(registro);
           }

           for (int i = 0; i < jTable1.getRowCount(); i++)
           {
               if (jTable1.getValueAt(i, 1).equals(valor))
               {
                   jTable1.changeSelection(i, 1, false, false);
                   break;
               }
           }
           

       }
       catch (SQLException ex)
       {
           JOptionPane.showMessageDialog(null, ex);
       }
       
   }




Usuario Invitado

Por lo que veo, estás buscando coincidencias por medio del botón buscar. Pensaba que era por un evento de cambio a medida que se escribe en el JTextField. De la manera como lo planteas ahora, es mucho más sencillo.

¿Todos tus campos en la BBDD son varchar, incluyendo código, precio y cantidad?

¿Qué tipo de excepción te da? En el catch coloca ex.printStackTrace() para que haga un rastreo de pila y dar más fácilmente con el problema.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein