Olá pessoal!
Estou tendo problema com tabelas e filtros…
Tenho uma JTable com filtro e um campo de texto onde, a cada caracter a tabela vai sendo “enxugada” até sobrar o registro procurado.
No exemplo que vou colocar, existe duas colunas, uma para marcar “x” e outra com nome. Quando você clica na coluna de seleção, eu pego o numero da linha e dou um setValueAt(“X”,linhaSelecionada, 0);
Agora vamos ao problema: Depois de uma pesquisa (algumas ou todas menos uma, sumiram), seleciono o “Fulano” mas o “X” não aparece, quando mostro todas as linhas, vejo que quem ficou com o “X” foi o “Gustavo”, isso porque na hora de inserir o “X” ele pegou o numero da linha em que “Fulano” se encontrava (1 pois depois de filtrado so existia ele na tabela) e colocou o “X” na linha 1 do antigo model da tabela, nesse antigo modem, antes do filtro, quem era a linha 1 era o “Gustavo”.
Vou colocar o codigo fonte do exemplo:
[code]package abount;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.regex.PatternSyntaxException;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.SwingUtilities;
@SuppressWarnings(“serial”)
public class TesteTableFilter extends javax.swing.JFrame {
private JTextField jTextField;
private JTable jTable;
private JButton jButton;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TesteTableFilter inst = new TesteTableFilter();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
private TesteTableFilter() {
try {
setSize(500,500);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
TableModel jTableModel =
new DefaultTableModel(
new String[][] { { "", "Gustavo" }, { "", "Joel" },{ "", "Moises" },{ "", "Marcio" },{ "", "Dalete" },{ "", "Joao" },{ "", "Hugo" },{ "", "Maria" },{ "", "Berreberte" },{ "", "Flauberth" },{ "", "Karina" },{ "", "Fulana" },{ "", "Cicrana" },{ "", "Suzana" },{ "", "Kenia" } },
new String[] { "X", "Nome" });
jTable = new JTable();
jTable.setModel(jTableModel);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(jTable.getModel());
jTable.setAutoscrolls(true);
jTable.setCellSelectionEnabled(false);
jTable.setRowSorter(sorter);
jTable.setColumnSelectionAllowed(false);
jTable.getScrollableTracksViewportHeight();
add(jTable);
jTable.setBounds(106, 19, 250, 250);
jTable.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
try{
if (jTable.getSelectedColumn()==0)
{
DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
int linha = jTable.getSelectedRow();
if (jTable.getValueAt(linha,0).equals(""))
{
defaultTableModel.setValueAt("X", linha, 0);
}
else
{
defaultTableModel.setValueAt("",linha, 0);
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
});
{
jTextField = new JTextField();
getContentPane().add(jTextField);
jTextField.setText("Joel");
jTextField.setBounds(74, 292, 328, 21);
jTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String text = jTextField.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
}
else
{
try
{
sorter.setRowFilter(RowFilter.regexFilter(text));
}
catch (PatternSyntaxException pse)
{
JOptionPane.showMessageDialog(null, "Não existe.", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
{
jButton = new JButton();
getContentPane().add(jButton);
jButton.setText("Mostrar o valor do objeto selecionado");
jButton.setBounds(74, 329, 328, 21);
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
for (int i =0; i<defaultTableModel.getRowCount();i++)
{
if (defaultTableModel.getValueAt(i, 0).equals("X"))
{
JOptionPane.showMessageDialog(null, "O selecionado foi: "+defaultTableModel.getValueAt(i, 1));
}
}
}
});
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}[/code]>