Ajuda Jtable e banco de dados

estou tentando retornar mais de um resultado na pesquisa que eu faço no banco de dados.
alguem poderia me ajudar, pois nao consigo implantar a logica.

este e o codigo do jframe janela de consultas.

package farmacia;

import java.sql.ResultSet;
import java.sql.SQLException;

public class ConsultarProduto extends javax.swing.JInternalFrame {
DAO dao = new DAO();

public ConsultarProduto() {
    
    initComponents();
    
    
}

@SuppressWarnings("unchecked")

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        txtpesquisa.setText("");
        jTable1.setValueAt("", 0, 0);
        jTable1.setValueAt("", 0, 1);
        jTable1.setValueAt("", 0, 2);
        jTable1.setValueAt("", 0, 3); 
    
}                                        

private void txtpesquisaActionPerformed(java.awt.event.ActionEvent evt) {                                            
    // TODO add your handling code here:
}                                           

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String produto = txtpesquisa.getText();
    ResultSet prod;
    prod = dao.buscartexto(produto);
    try{
        while(prod.next()){
        
        jTable1.setValueAt(prod.getString("Codigo"), 0, 0);
        jTable1.setValueAt(prod.getString("produto"),0, 1);
        jTable1.setValueAt(prod.getString("categoria"),0, 2);
        jTable1.setValueAt(prod.getString("preco"), 0, 3);

}

    }catch( SQLException e) {
        System.out.println("Falha ao realizar a consulta no BD");
    }
}                                        


// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField txtpesquisa;
// End of variables declaration                   

}

Estenda a classe AbstractTableModel para renderizar um List de objetos Produto.
Aí no seu laço, basta inserir produtos na lista.

preciso estender a classe da janela mesmo? ou crio uma nova classe

Não há nenhuma “classe da janela” a ser estendida.
AbstractTableModel é uma classe abstrata que já implementa alguns métodos da interface TableModel
Um TableModel atua como fonte de dados para um componente JTable.
Você vai criar uma nova classe que estende o AbstractTableModel, essa classe pode ser uma classe interna privada da sua janela.

Suponha que você tenha a seguinte classe para representar um produto:

public class Produto {

    private String codigo;
    private String nome;
    private String categoria;
    private double preco;

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }
}

Dentro da classe onde você tem sua JTable, crie também a seguinte classe interna:

private class TableModelProdutos extends AbstractTableModel {

    private final String[] colunas = new String[] { "Codigo", "Nome", "Categoria", "Preco" };

    private List<Produto> produtos;

    TableModelProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    // a JTable chama esse método pra saber quantas colunas ela tem
    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    // a JTable chama esse método pra saber o nome da coluna informada
    @Override
    public String getColumnName(int col) {
        return colunas[col];
    }

    // a JTable chama esse método pra saber quantas linhas ela tem
    @Override
    public int getRowCount() {
        return produtos.size();
    }

    // a JTable chama esse método pra saber qual valor deve ser apresentado na linha e coluna informados
    @Override
    public Object getValueAt(int lin, int col) {
        if (lin > -1 && lin < produtos.size()) {
            Produto produto = produtos.get(lin);
            switch (col) {
                case 0:
                    return produto.getCodigo();
                case 1:
                    return produto.getNome();
                case 2:
                    return produto.getCategoria();
                case 3:
                    return produto.getPreco();
            }
        }
        return null;
    }
}

Aí basta você alimentar sua JTable da seguinte forma:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    String texto = txtpesquisa.getText();
    ResultSet resultset = dao.buscartexto(texto);
    List<Produto> produtos = new ArrayList<>();
    try {
        while (resultset.next()) {
            // ler dados do banco
            String codigo = resultset.getString("Codigo");
            String nome = resultset.getString("produto");
            String categoria = resultset.getString("categoria");
            double preco = resultset.getDouble("preco");

            // criar objeto produto com o valor desses dados
            Produto produto = new Produto();
            produto.setCodigo(codigo);
            produto.setNome(nome);
            produto.setCategoria(categoria);
            produto.setPreco(preco);

            // adicionar produto à lista de produtos
            produtos.add(produto);
        }
    } catch (SQLException e) {
        System.out.println("Falha ao realizar a consulta no BD");
    } finally {
        jTable1.setModel(new TableModelProdutos(produtos)); // atualizar o modelo da JTable com os produtos pesquisados
    }
}
1 curtida

obrigado pela explicação, sensacional. vou procurar estudar sobre essas classes, realmente não conhecia. funcionou tudo aqui, obrigado!