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.
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.
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
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!!
Putz kra, mais ignorante eu nao poderia ser neh…
Foi mal… tava estressado.
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!