I'm doing a search on my jTable
, but when I search, jTable
only displays content similar to my search.
IwouldliketodoasearchonjTable
withoutinhibitingallremainingcontent,myideawouldbeforjTable
toperformasortorderbasedonthesearchyouentered.
ModelProducts
publicclassModelProdutos{privateintcodProduto;privateStringdescProduto;privatedoubleprecoProduto;publicModelProdutos(intcodPro,StringdescPro,doubleprecoPro){this.codProduto=codPro;this.descProduto=descPro;this.precoProduto=precoPro;}publicintgetCodProduto(){returncodProduto;}publicvoidsetCodProduto(intcodProduto){this.codProduto=codProduto;}publicStringgetDescProduto(){returndescProduto;}publicvoidsetDescProduto(StringdescProduto){this.descProduto=descProduto;}publicdoublegetPrecoProduto(){returnprecoProduto;}publicvoidsetPrecoProduto(doubleprecoProduto){this.precoProduto=precoProduto;}}
TableModel
importjava.util.ArrayList;importjavax.swing.table.AbstractTableModel;publicclassTbModelProtudosextendsAbstractTableModel{privatefinalStringcolunas[]={"Cód.", "Descrição", "Preço"};
private final ArrayList<ModelProdutos> produtos;
private final int COLUNA_COD = 0;
private final int COLUNA_DESC = 1;
private final int COLUNA_PRECO = 2;
public TbModelProtudos (ArrayList<ModelProdutos> lsProdutos) {
this.produtos = lsProdutos;
}
@Override
public boolean isCellEditable(int linha, int coluna) {
return false;
}
@Override
public int getRowCount() {
return produtos.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public String getColumnName(int indice) {
return colunas[indice];
}
@Override
public Class<?> getColumnClass(int indice) {
switch (indice) {
case COLUNA_COD:
return Integer.class;
case COLUNA_DESC:
return String.class;
case COLUNA_PRECO:
return Double.class;
default:
return String.class;
}
}
@Override
public Object getValueAt(int linha, int coluna) {
ModelProdutos mProdutos = this.produtos.get(linha);
switch (coluna) {
case COLUNA_COD:
return mProdutos.getCodProduto();
case COLUNA_DESC:
return mProdutos.getDescProduto();
case COLUNA_PRECO:
return mProdutos.getPrecoProduto();
}
return null;
}
}
ViewSearchProducts
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.TableRowSorter;
public class JtableProdutos extends JPanel {
private JTable tbProdutos;
private JTextField campoPesquisa;
private TbModelProtudos mTabelaProtudos;
private TableRowSorter<TbModelProtudos> rowSorter;
public JtableProdutos() {
renderizar();
}
private void renderizar() {
ModelProdutos p1 = new ModelProdutos(1, "ARROZ BRANCO PARBOILIZADO", 2.49);
ModelProdutos p2 = new ModelProdutos(2, "ARROZ BRANCO INTEGRAL", 3.49);
ModelProdutos p3 = new ModelProdutos(3, "FEIJAO CARIOCA", 14.99);
ModelProdutos p4 = new ModelProdutos(4, "ESTRATO DE TOMATE", 3.69);
ModelProdutos p5 = new ModelProdutos(5, "CARNE MOIDA", 9.99);
ArrayList<ModelProdutos> lsProdutos = new ArrayList<>();
lsProdutos.add(p1);
lsProdutos.add(p2);
lsProdutos.add(p3);
lsProdutos.add(p4);
lsProdutos.add(p5);
mTabelaProtudos = new TbModelProtudos(lsProdutos);
tbProdutos = new JTable(mTabelaProtudos);
rowSorter = new TableRowSorter<>(mTabelaProtudos);
campoPesquisa = new JTextField();
tbProdutos.setRowSorter(rowSorter);
tbProdutos.getColumnModel().getColumn(1).setPreferredWidth(300);
JPanel panel = new JPanel(new BorderLayout());
panel.add(campoPesquisa, BorderLayout.CENTER);
setLayout(new BorderLayout());
add(panel, BorderLayout.SOUTH);
add(new JScrollPane(tbProdutos), BorderLayout.CENTER);
campoPesquisa.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent evt) {
String pesquisa = campoPesquisa.getText().toUpperCase();
rowSorter.setRowFilter(RowFilter.regexFilter(pesquisa));
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Pesquisar Produtos");
frame.add(new JtableProdutos());
frame.pack();
frame.setSize(500, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}