Perform jTable search

0

I'm doing a search on my jTable , but when I search, jTable only displays content similar to my search.

IwouldliketodoasearchonjTablewithoutinhibitingallremainingcontent,myideawouldbeforjTabletoperformasortorderbasedonthesearchyouentered.

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);
            }
        });
    }
}
    
asked by anonymous 02.09.2018 / 19:11

0 answers