Atualizar uma JTable com um JTextField

Ola Pessoal.

Eu tenho um JDialog com uma JTable e um JTextField, na JTable tem uma coluna com nomes, eu quero q ao digitar um nome no JTextField a tabela seja atualizada para a ocorrencia mais proxima daquele nome. :slight_smile:

Nunca tinha usado JTable na vida e só tinha usado KeyListener com JPanel…
Mas ta ae. Com certeza nao eh melhor maneira:

[code]
public class TableTest extends JFrame implements KeyListener {
public static void main(String args[]){
new TableTest();
}

private static final long serialVersionUID = 1L;

JTextField texto = new JTextField();
JTable table;

public TableTest(){
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	getContentPane().setLayout(new FlowLayout());
	
	setPreferredSize(new Dimension(200, 200));
	
	texto.setColumns(10);
	texto.addKeyListener(this);
	
	String[] cNames = {"Nome", "Idade"};
	String[][] valores = new String[4][2];
	
	valores[0][0] = "Goofed";
	valores[0][1] = "19";
	valores[1][0] = "Miss Goofeda";
	valores[1][1] = "18";
	valores[2][0] = "York";
	valores[2][1] = "20";
	valores[3][0] = "Miss Shire";
	valores[3][1] = "21";
	
	table = new JTable(valores, cNames);
	
	getContentPane().add(texto);
	getContentPane().add(table);
	
	pack();
	setVisible(true);
}

public void keyPressed(KeyEvent e) {}

public void keyReleased(KeyEvent e) {
	int coluna = 0; //Coluna 0 = Coluna "Nome"
	for (int i = 0; i < table.getRowCount(); i++) {
		if (texto.getText().equals(table.getValueAt(i, coluna))) {
			table.setRowSelectionInterval(i, i);
			return;
		}
	}
}

public void keyTyped(KeyEvent e) {}

}[/code]

valeu cara pela resposta… vou tentar por aqui, qualquer coisa…

voltei pessoal :slight_smile:

implementei da maneiro q o goofed falow… mas ele soh seleciona a linha quando eu digito exatamente o nome da pessoa… (o problema esta no metodo equals)

Exemplo:

se tiver o nome “Marcelo rocha” ele soh seleciona a linha se eu digitar o nome completo… eu quero q ele posicione quanto eu digitar somente o primeiro nome…

acho q deu para entender… falow galera

Bem cara… ja pensou se todo mundo que quizesse uma resposta 100% pro caso dela, imagina como estaria esse forum neh… 9000000000000 de mensagens…

Uma dica, vc tem duvidas sobre Strings… entao procure os metodos que tem a string…

Um exemplo de como vc pode resolver isso:

//Um nome que esta na JTable...
String nome = "Jose Almeida";
//O nome que o usuario digitou para procurar:
String nomeProcurado = "jose";

//Converte ambos os nomes para minusculo:
String nomeMinusculo = nome.toLowerCase();
String nomeProcuradoMinusculo = nomeProcurado.toLowerCase();

//Verifica se a localizacao da String nomeProcuradoMinusculo em nomeMinusculo é diferente de -1.
//Quando o indexOf retorna -1 significa que nomeProcuradoMinusculo nao foi encontrado em nomeMinusculo.
if (nomeMinusculo.indexOf(nomeProcuradoMinusculo) != -1) {
   System.out.println(nome + " contem a palavra " + nomeProcurado);
}

cara eu soh posto aqui no forum quando eu ja estou com dor de cabeça de tanto bater cabeça com o Java Doc…

eu implementei de maneira parecida com a qual vc postou agora… mas estava se conportando de maneira estranha

public void busca(){
        int coluna =1; // n da coluna onde se encontra o texto a ser localizado. 
        for(int i=0;i<tabela.getRowCount();i++){
            String linhaTabela = String.valueOf(tabela.getValueAt(i,coluna)).toUpperCase();
            String procura = Tprocura.getText().toUpperCase();
            int res = linhaTabela.indexOf(procura);
            if(res>=0){
                tabela.setRowSelectionInterval(i,i);                                
            }
            
        }      
    
    }

bom… de qualquer maneira valeu pela dica!! :smiley:

Putz kra, mais ignorante eu nao poderia ser neh…
Foi mal… tava estressado. :frowning:
Desculpa mesmo… Vo comecar a me controlar e pensar antes de clicar no botao Enviar…

Mas tipo… vc resolveu o problema? Se ainda nao tiver resolvido… posta ae.

Relaxe cara… eu levei na esportiva…

consegui resolver sim o problema… adicionei um return dentro do if

ta ai o codigo:

public void busca(){
        int coluna =1; // n da coluna onde se encontra o texto a ser localizado. 
        for(int i=0;i<tabela.getRowCount();i++){
            String linhaTabela = String.valueOf(tabela.getValueAt(i,coluna)).toUpperCase();
            String procura = Tprocura.getText().toUpperCase();
            int res = linhaTabela.indexOf(procura);
            if(res>=0){
                tabela.setRowSelectionInterval(i,i);
                return;                
            }
            
        }      
    
    }

bom… ate mais, valeu pela força!