0
I’m conducting a survey in my jTable, but when performing the research, the jTable displayed only content similar to my search.
I would like to conduct a search on jTable without inhibiting all remaining content, my idea would be that the jTable perform an ordering based on the typed search.
Modelproducts
public class ModelProdutos {
    private int codProduto;
    private String descProduto;
    private double precoProduto;
    public ModelProdutos(int codPro, String descPro, double precoPro) {
        this.codProduto = codPro;
        this.descProduto = descPro;
        this.precoProduto = precoPro;
    }
    public int getCodProduto() {
        return codProduto;
    }
    public void setCodProduto(int codProduto) {
        this.codProduto = codProduto;
    }
    public String getDescProduto() {
        return descProduto;
    }
    public void setDescProduto(String descProduto) {
        this.descProduto = descProduto;
    }
    public double getPrecoProduto() {
        return precoProduto;
    }
    public void setPrecoProduto(double precoProduto) {
        this.precoProduto = precoProduto;
    }
}
Tablemodel
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class TbModelProtudos extends AbstractTableModel {
    private final String colunas[] = {"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;
    }
}
Viewpesquisaproducts
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);
            }
        });
    }
}

when typing "meat", the lines would be ordered with all the items that have "meat" in the description (without inhibiting all the remaining content in the table).
– Ernani Jr
That’s not filtering, it’s sorting, there’s no point doing it with rowfilter.
– user28595
so I’m asking how to do, is it possible to tell me a direction or present an example that I can follow?
– Ernani Jr
This is not possible with rowsorter, because what you want to do is not a filter, but order the table only. rowfilter takes the filter and creates a new time model, only with results that match what was searched. I can’t think of any easy way to do that.
– user28595