Trabalhando com filtros em uma JTable

7 respostas
C

Ola
Estou fazendo um sistema de contas pagar e receber, em uma JTable tenho um JCombo [Pagar, Paga, Receber, Recebida ] e 2 JTextField, sendo um data inicial e outro data final. Consigo filtrar na JTable tanto o Jcombo como qualquer JText mas só que individual. O que ocorre é o seguinte. Por ex quero que filtre na combo [ PAGAR ], na 1ª JText - data inicial [ dd/mm/aaaa ] e na 2ª Jtext - data final [ dd/mm/aaa ] e assim me mostre filtrado na JTable o que eu escolhi na Combo e o que digitei nas duas JText. Alguem ai pode me ajudar

7 Respostas

ViniGodoy

Use o TableFilter do projeto Towel:

Ele é muito parecido com o recurso de “auto-filtro” do Excel.

C

ViniGodoy:
Use o TableFilter do projeto Towel:

Ele é muito parecido com o recurso de “auto-filtro” do Excel.

Obrigado, mas não é isso que estou procurando, quero realmente usar um combo e duas jtextfield com data inicial e data final

ViniGodoy

Como vc tem feito o filtro hoje?

danielso2007

Seria algo parecido com isso?

http://www.java2s.com/Tutorial/Java/0240__Swing/FiltertablebythetextinaTextField.htm

C

Na Tela:

Tenho um: JComboBox [ cmbpesquisa ] - [pagar, paga, receber, recebida ]
JTextField [ txtdatainicial ] - [ dd/mm/aaaa ] - seria data inicial
JTextField [ txtdatafinal ] - [ dd/mm/aaa ] - seria data final

Como esta no codigo abaixo, ele só filtra ou no combo, ou nas datas, queria relacionar tudo, o combo com as datas e filtrar na
JTable

Segue o código completo

package Relatorio;

import Cadastro.Fornecedor;

import java.awt.event.ActionListener;

import java.sql.SQLException;

import java.util.Date;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.* ;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.DefaultTableModel;

import utilitarios.conexao;

import javax.swing.text.MaskFormatter;
public class RelaContasFiltrado extends javax.swing.JFrame

{

MaskFormatter formatodatacada;

private MaskFormatter formatodata;

private MaskFormatter formatocep;

private MaskFormatter formatocnpj;

private MaskFormatter formatoie;

private MaskFormatter formatoccm;

private MaskFormatter formatoddi;

private MaskFormatter formatotelefone;

int navega = 0 ;

String ordenacao ="codigo";

String ordenacao1 ="posicaoconta";
String novo = "n";

conexao contas;
private ActionListener ActionListener;

/** Creates new form RelaContasFiltrado */
public RelaContasFiltrado()

{

initComponents();

contas = new conexao();

contas.conecta();

contas.executeSQL("select * from Contas order by "+ordenacao);

try

{

contas.executeSQL("select * from Contas order by posicaoconta");

preencher_jtable();

contas.executeSQL("select * from Contas order by codigo");

contas.resultset.last();

mostrardados();
}

catch(SQLException erro)

{

JOptionPane.showMessageDialog(null,"BANCO DE DADOS NÃO ENCONTRADO, VERIFIQUE O ERRO");

}

}
public void mostrardados()

{

{

txtpesquisa.setVisible(false);
//MOSTRA DATA NO FORMULÁRIO

Date data = new Date();

String dia = "" + data.getDate();

String mes = "" + String.valueOf(data.getMonth()+1);

String ano = "" + (1900 + data.getYear());

if (Integer.parseInt(dia)<=9)

dia = "0" + dia;

if (Integer.parseInt(mes)<=9)

mes = "0" + mes;

datacada.setText(dia+"/"+mes+"/"+ano);

datacada.setEditable(false);
//MOSTRA HORA NO FORMULÁRIO

Date hora = new Date();

String thora ="" + data.getHours();

String tminuto=""+ data.getMinutes();

String tsegundo=""+ data.getSeconds();

if (Integer.parseInt(tminuto)<=9)

tminuto = "0" + tminuto;

if (Integer.parseInt(tsegundo)<=9)

tsegundo = "0" + tsegundo;

horacada.setText(thora+":"+tminuto+":"+tsegundo);

horacada.setEditable(false);
//DESABILITA O X NO FORMULÁRIO

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

}

}
public void preencher_jtable()

{

DefaultTableCellRenderer esquerda = new DefaultTableCellRenderer();

DefaultTableCellRenderer centro = new DefaultTableCellRenderer();

DefaultTableCellRenderer direita = new DefaultTableCellRenderer();
esquerda.setHorizontalAlignment(SwingConstants.LEFT);

centro.setHorizontalAlignment(SwingConstants.CENTER);

direita.setHorizontalAlignment(SwingConstants.RIGHT);
//CODIGO

jTable.getColumnModel().getColumn(0).setCellRenderer(centro);

//DATAVENCIMENTO

jTable.getColumnModel().getColumn(1).setCellRenderer(centro);

//FORNECEDOR

jTable.getColumnModel().getColumn(2).setCellRenderer(esquerda);

//VALOR

jTable.getColumnModel().getColumn(3).setCellRenderer(direita);

//PISIÇÃO CONTA

jTable.getColumnModel().getColumn(4).setCellRenderer(esquerda);

//CODIGO DE BARRAS

jTable.getColumnModel().getColumn(5).setCellRenderer(esquerda);
//CODIGO

jTable.getColumnModel().getColumn(0).setPreferredWidth(10);

//DATA VENCIMENTO

jTable.getColumnModel().getColumn(1).setPreferredWidth(20);

//FORNECEDOR

jTable.getColumnModel().getColumn(2).setPreferredWidth(200);

//VALOR

jTable.getColumnModel().getColumn(3).setPreferredWidth(30);

//POSIÇÃO CONTA

jTable.getColumnModel().getColumn(4).setPreferredWidth(30);

//CODIGO DE BARRAS

jTable.getColumnModel().getColumn(5).setPreferredWidth(200);
DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

modelo.setNumRows(0);

try

{

while(contas.resultset.next()

)

modelo.addRow(new Object[]

{

contas.resultset.getString(codigo),

contas.resultset.getString(datavencimento),

contas.resultset.getString(fornecedor),

contas.resultset.getString(valor),

contas.resultset.getString(posicaoconta),

contas.resultset.getString(codigobarras),

}

)

;

}

catch(SQLException erro)

{

}

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

@SuppressWarnings(unchecked)

// <editor-fold defaultstate=collapsed desc=Generated Code>

private void initComponents() {
jPanel3 = new javax.swing.JPanel();
    jLabel14 = new javax.swing.JLabel();
    datacada = new javax.swing.JTextField();
    horacada = new javax.swing.JTextField();
    jPanel1 = new javax.swing.JPanel();
    btsair = new javax.swing.JButton();
    btfiltartabela = new javax.swing.JButton();
    btlistatudo = new javax.swing.JButton();
    cmbpesquisa = new javax.swing.JComboBox();
    txtpesquisa = new javax.swing.JTextField();
    jScrollPane2 = new javax.swing.JScrollPane();
    jTable = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("CRCJ - Assessoria Em Informática");
    setResizable(false);

    jPanel3.setBackground(java.awt.SystemColor.desktop);
    jPanel3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jPanel3.setForeground(new java.awt.Color(255, 255, 255));

    jLabel14.setBackground(new java.awt.Color(0, 255, 0));
    jLabel14.setFont(new java.awt.Font("Haettenschweiler", 0, 24));
    jLabel14.setForeground(new java.awt.Color(255, 255, 255));
    jLabel14.setText("Relatório Das Contas Pagar e Receber");

    datacada.setBackground(java.awt.SystemColor.desktop);
    datacada.setFont(new java.awt.Font("Arial", 0, 16));
    datacada.setForeground(new java.awt.Color(255, 255, 255));
    datacada.setHorizontalAlignment(javax.swing.JTextField.CENTER);

    horacada.setBackground(java.awt.SystemColor.desktop);
    horacada.setFont(new java.awt.Font("Arial", 0, 16));
    horacada.setForeground(new java.awt.Color(255, 255, 255));
    horacada.setHorizontalAlignment(javax.swing.JTextField.CENTER);

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
    jPanel3.setLayout(jPanel3Layout);
    jPanel3Layout.setHorizontalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel14)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 433, Short.MAX_VALUE)
            .addComponent(datacada, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(horacada, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(21, 21, 21))
    );
    jPanel3Layout.setVerticalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addContainerGap(13, Short.MAX_VALUE)
            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(horacada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(datacada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addContainerGap())
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel14)
            .addContainerGap(12, Short.MAX_VALUE))
    );

    jPanel1.setBackground(new java.awt.Color(102, 255, 204));
    jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jPanel1.setForeground(new java.awt.Color(255, 255, 255));

    btsair.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
    btsair.setText("Sair");
    btsair.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btsairActionPerformed(evt);
        }
    });

    btfiltartabela.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
    btfiltartabela.setText("Filtrar ");
    btfiltartabela.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btfiltartabelaActionPerformed(evt);
        }
    });

    btlistatudo.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
    btlistatudo.setText("Listar Todos");
    btlistatudo.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btlistatudoActionPerformed(evt);
        }
    });

    cmbpesquisa.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
    cmbpesquisa.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Pagar", "Paga", "Receber", "Recebida" }));

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(cmbpesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(40, 40, 40)
            .addComponent(btfiltartabela)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 244, Short.MAX_VALUE)
            .addComponent(btlistatudo)
            .addGap(88, 88, 88)
            .addComponent(txtpesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(83, 83, 83)
            .addComponent(btsair, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(28, 28, 28))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(btsair)
                .addComponent(cmbpesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(btfiltartabela)
                .addComponent(txtpesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(btlistatudo))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    jTable.setFont(new java.awt.Font("Tahoma", 0, 10));
    jTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null}
        },
        new String [] {
            "Código", "Data Vencimento", "Fornecedor", "Valor", "Posição da Conta", "Código de Barras"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, false, false, false, false, false
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jTable.getTableHeader().setReorderingAllowed(false);
    jScrollPane2.setViewportView(jTable);
    jTable.getColumnModel().getColumn(0).setResizable(false);
    jTable.getColumnModel().getColumn(1).setResizable(false);
    jTable.getColumnModel().getColumn(2).setResizable(false);
    jTable.getColumnModel().getColumn(3).setResizable(false);
    jTable.getColumnModel().getColumn(5).setResizable(false);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 965, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(1, 1, 1)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 531, Short.MAX_VALUE)
            .addContainerGap())
    );

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-993)/2, (screenSize.height-685)/2, 993, 685);
}// &lt;/editor-fold&gt;                        

private void btsairActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // TODO add your handling code here:
//if(javax.swing.JOptionPane.showConfirmDialog(null,“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,javax.swing.JOptionPane.YES_NO_OPTION )==0)

<a href="//this.dispose">//this.dispose</a>();

//new Principal.TelaPrincipal().show();

Object[] options =

{

“Sim”, “Não”

};

int i = JOptionPane.showOptionDialog(null,

“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,

JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,

options, options[0]);

if (i == JOptionPane.YES_OPTION)

{

<a href="//System.exit">//System.exit</a>(0);

this.dispose();

new Principal.TelaPrincipal().show();

}

}
private void btfiltartabelaActionPerformed(java.awt.event.ActionEvent evt) {                                               
    // TODO add your handling code here:
////contas.executeSQL(“select * from Contas where posicaoconta like '”+txtpesquisa.getText()+"%’ order by “+ordenacao1);

<a href="//contas.executeSQL">//contas.executeSQL</a>(“select * from Contas where posicaoconta like '”+txtpesquisa.getText()+”’ order by “+ordenacao1);

contas.executeSQL(“select * from Contas where posicaoconta like '”+cmbpesquisa.getSelectedItem()+”’ order by “+ordenacao1);

preencher_jtable();

txtpesquisa.setText(”");

try

{

contas.resultset.last();

}

catch (SQLException ex)

{

Logger.getLogger(Fornecedor.class.getName()).log(Level.SEVERE, null, ex);

}

mostrardados();

}
private void btlistatudoActionPerformed(java.awt.event.ActionEvent evt) {                                            
    // TODO add your handling code here:
contas.executeSQL(“select * from Contas where posicaoconta like '”+txtpesquisa.getText()+"%’ order by “+ordenacao1);

<a href="//contas.executeSQL">//contas.executeSQL</a>(“select * from Contas where posicaoconta like '”+txtpesquisa.getText()+”’ order by “+ordenacao1);

preencher_jtable();

txtpesquisa.setText(”");

try

{

contas.resultset.last();

}

catch (SQLException ex)

{

Logger.getLogger(Fornecedor.class.getName()).log(Level.SEVERE, null, ex);

}

mostrardados();

}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new RelaContasFiltrado().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton btfiltartabela;
private javax.swing.JButton btlistatudo;
private javax.swing.JButton btsair;
private javax.swing.JComboBox cmbpesquisa;
private javax.swing.JTextField datacada;
private javax.swing.JTextField horacada;
private javax.swing.JLabel jLabel14;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable;
private javax.swing.JTextField txtpesquisa;
// End of variables declaration

}

C

danielso2007:
Seria algo parecido com isso?

http://www.java2s.com/Tutorial/Java/0240__Swing/FiltertablebythetextinaTextField.htm

Filer tabela linha e chave de ordenação, parecido mas o que eu queria, na realidade era trabalhar com 3 filtros
1 - JComboBox [ pagar, receber, paga, recebida ]
1 - JTextField [ data inicial ]
1 - JTextField [ data final ]
com esses 3 fltros ele me mostra na JTable.

Eu consigo filtrar um por um, por ex no combo escolho pagar
e click botao filtrar, ai tudo bem ele me mostra todos os dados na JTable os cadastros de todos pagar, mas ai eu
precisso tambem filtrar um periodo que esta nas datas, é ai que eu não consigo

C

O que eu queria, na realidade era trabalhar com 3 filtros
1 - JComboBox [ pagar, receber, paga, recebida ]
1 - JTextField [ data inicial ]
1 - JTextField [ data final ]
com esses 3 fltros ele me mostra na JTable.

Eu consigo filtrar um por um, por ex no combo escolho pagar
e click botao filtrar, ai tudo bem ele me mostra todos os dados na JTable os cadastros de todos pagar, mas ai eu
precisso tambem filtrar um periodo que esta nas datas, é ai que eu não consigo

Criado 23 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 7
Participantes 3