Pessoal, eu preciso fazer uma pesquisa de linhas de uma JTable.
Quero usar um JTextField pra fazer a pesquisa dentro da JTable, de forma que quando digitar alguma coisa no jTextField ele já selecione a linha na JTable.
A JTable está pegando resultado do banco de dados.
[code] // Minha tabela
private void Table()throws Exception {
try {
short rowNum = 0;
short colNum = 0;
rs = stmt.executeQuery(“select fil_cod, nome_fil from c_filial”);
rsmd = rs.getMetaData();
int col = rsmd.getColumnCount();
System.out.println(“No of Colums: “+col);
while(rs.next()) {
bv = new Vector();
int a;
for(a=1;a<=col;a++) {
if(flag) {
head.add(rsmd.getColumnName(a));
}
bv.add(rs.getString(a).toString()+””);
}
body.add(bv);
flag=false;
}
rs.close();
stmt.close();
con.close();
}
catch(Exception exec) {
JOptionPane.showMessageDialog(null, “Problemas na tabela.”, “Erro”, JOptionPane.ERROR_MESSAGE);
exec.printStackTrace();
}
jTable = new JTable(body, head);
jTable.setLocation(new Point(15, 118));
jTable.setBackground(new Color(204, 204, 204));
jTable.setAutoscrolls(true);
jTable.setCellSelectionEnabled(false);
jTable.setSize(new Dimension(200, 200));
jTable.setColumnSelectionAllowed(false);
jTable.setSize(new Dimension(200, 200));
jTable.getScrollableTracksViewportHeight();
}
// Meu jTextField
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(5, 29, 96, 21));
}
return jTextField;
}
[/code]
Alguém tem um exemplo?
Eu tentei algo assim:
// Meu jTextField
private JTextField getJTextField(java.awt.event.KeyEvent evt) {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(5, 29, 96, 21));
procuraTable(jtextfield.getText());
}
return jTextField;
}
-------------------------------------
// Classe para fazer a pesquisa na JTable
private void procuraTable(String nome){
int tamanho = nome.length();
for (int linha = 0; linha<jTable.getRowCount(); linha++){
String nomeTabela = (String)jTable.getValueAt(linha, 1);
if (nomeTabela.substring(0,tamanho).equals(nome)){
jTable.setRowSelectionInterval(linha,linha);
}
}
}
E também tentei assim:
private JTextField getJTextField(java.awt.event.KeyEvent evt) {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(5, 29, 96, 21));
DocumentListener myListener = new DocumentListener(){
public void changedUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
public void insertUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
public void removeUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
};
jTextField.getDocument().addDocumentListener(myListener);
}
return jTextField;
}
Mas NÃO deu certo.
Dica, idéia, sugestão, exemplo…
Qualquer coisa é bem vinda ![:slight_smile: :slight_smile:](//www.guj.com.br/images/emoji/twitter/slight_smile.png?v=5)
Consegui… Para quem precisar, vai o código abaixo:
// Meu JButton que tem a função de fazer o filtro.
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(102, 15, 23, 23));
jButton.setIcon(new ImageIcon(getClass().getResource("/images/ok.png")));
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = jTextField.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
JOptionPane.showMessageDialog(null, "Não existe.", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
return jButton;
}
// Minha JTable que faz um select no
// BD e retorna os resultados criando as tabelas com as colunas do select
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
private void Table()throws Exception {
try {
rs = stmt.executeQuery("select XXX, XXX, XXX from XXXXXX");
rsmd = rs.getMetaData();
int col = rsmd.getColumnCount();
while(rs.next()) {
bv = new Vector<String>();
int a;
for(a=1;a<=col;a++) {
if(flag) {
head.add(rsmd.getColumnName(a));
}
bv.add(rs.getString(a).toString()+"");
}
body.add(bv);
flag=false;
}
rs.close();
stmt.close();
con.close();
}
catch(Exception exec) {
JOptionPane.showMessageDialog(null, "Problemas na tabela.", "Erro", JOptionPane.ERROR_MESSAGE);
exec.printStackTrace();
}
jTable = new JTable(body, head);
jTable.setLocation(new Point(15, 118));
jTable.setBackground(new Color(204, 204, 204));
jTable.setAutoscrolls(true);
jTable.setCellSelectionEnabled(false);
jTable.setSize(new Dimension(200, 200));
jTable.setModel(model);
jTable.setRowSorter(sorter);
jTable.setColumnSelectionAllowed(false);
jTable.setSize(new Dimension(200, 200));
jTable.getScrollableTracksViewportHeight();
}
}
Espero ter ajudado.
Um abraço