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!