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:
(http://2.bp.blogspot.com/_l9TfBKpNoJo/TT0S123Pz8I/AAAAAAAAAb8/P8T1V7NyzVY/s400/seleccionar%2Buna%2Bfila%2Bde%2Bun%2Bjtable%2Ben%2Bjava.JPG)
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:
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
Para lo primero se me ocurre algo así:
// 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.
Que significa esto, Que va aquí:
hightlightRow(count);
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.
Lo estoy desarrollando en Netbeans
El código lo tengo en el botón Buscar:
No me funciona
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();
}
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);
}
}
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.