Selecionando o conteudo de uma célula da Jtable

16 respostas
W

Olá pessoal,

estou tentando fazer com q quando o Jtextfield esteja com foco ele selecione o conteudo da Jtextfield, porem inseri esse Jtextfield dentro de uma coluna da minha Jtable, tentei da maneira abaixo porem não da certo quando a Jtextfield esta dentro da Jtable. Alguem poderia me ajudar ou apontar um possivel erro?

Grato.

TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);
        tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));
     
                  
        
                 tfValorFabrica.addFocusListener(new FocusAdapter() {
            
            public void focusGained(FocusEvent e) {
                super.focusGained( e );
                tfValorFabrica.selectAll();
            }
        });

16 Respostas

JoatanGuj

não entendi muito bem oque tu quer >_>

quando você clickar na TextFild tu quer que selecione tudo e passe o texto contido dela pra uma celular da tua jTable? qual celula?..

W

Então JoatanGuj ,

é o seguinte, eu tenho uma Jtextfield inserida em uma coluna da minha Jtable, o que eu quero fazer é que quando estiver com o foco ou clicado em uma célula qualquer da minha Jtable, selecione o conteudo da mesma.

Me falaram para fazer com o evento de mouseClicked, eu até consegui pegar a linha e a coluna clicada, porem não consegui devolver a minha Jtextfield para que eu de um selectAll() nela.

Segue o código abaixo para um melhor entendimento:

private void areaEstoqueMouseClicked(java.awt.event.MouseEvent evt) {                                         
 
    
   TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);
   tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));
   

    Point click = new Point(evt.getX(), evt.getY());  
              
    int column = areaEstoque.columnAtPoint(click);  
    int row = areaEstoque.rowAtPoint(click);

 //não consigo trazer minha jTextfield (tfValorFabrica) p/ dar um selectAll() na mesma, não funcionou da maneira abaixo

    String celula = areaEstoque.getModel().getValueAt(row, column).toString();
    tfValorFabrica.setText(celula);
    tfValorFabrica.selectAll();    

    
}
JoatanGuj

entendi , basta você armazenar os valores contidos nas células em variaveis e depois setar as variaveis na jTextField supondo que tenhamos isso

1 jTable com o nome = minhaTable(com 3 colunas , a 1°=Nome/ a 2°=Sobrenome/3°= CPF).
3 campos jTextfield = nome,sobrenome e cpf;
ok vamos ao trabalho.

oque você deve fazer é simples segue o codigo com explicações:

String pegarNome = minhaTable.getValueAt(minhaTable.getSelectedRow(), 0);// tem uma virgula 0 porque é a linha selecionada coluna 0.
String pegarSobrenome =  minhaTable.getValueAt(minhaTable.getSelectedRow(), 1);// tem uma virgula 1 porque é a linha selecionada coluna 1.
String pegarCPF = minhaTable.getValueAt(minhaTable.getSelectedRow(), 2);// tem uma virgula 2 porque é a linha selecionada coluna 2.

//agora que ja temos os valor vamos "jogar" os valores na jTextField.
nome.setText(pegarNome);
sobrenome.setText(pegarSobrenome);
cpf.setText(pegarCPF);
//pronto ^^

espero que eu tenha ajudado, qualuqer coisa pode perguntar.

W

Olá JoatanGuj ,

obrigado pela atenção, porem não funciona dessa maneira dentro da jTable, ja tentei fazer assim porem não tive sucesso, segue o código abaixo mais ou menos da maneira como vc explicou.

private void areaEstoqueMouseClicked(java.awt.event.MouseEvent evt) {                                         
    
   TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);

   //insere a jtextfield tfValorFabrica na coluna 4 da Jtable
   tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));

    Point click = new Point(evt.getX(), evt.getY());  
              
    int column = areaEstoque.columnAtPoint(click);  
    int row = areaEstoque.rowAtPoint(click);

    //pega o valor da celula clicada
    String celula = areaEstoque.getModel().getValueAt(row, column).toString();
    tfValorFabrica.setText(celula);
    tfValorFabrica.selectAll();    
    
}
JoatanGuj

Funciona cara >.< ja usei tantas vezes… que modelo de jTable ta usando?. mesmo assim funciona sim lol

JoatanGuj
wesleypc:
Olá JoatanGuj ,

obrigado pela atenção, porem não funciona dessa maneira dentro da jTable, ja tentei fazer assim porem não tive sucesso, segue o código abaixo mais ou menos da maneira como vc explicou.

private void areaEstoqueMouseClicked(java.awt.event.MouseEvent evt) {                                         
    
   TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);

   //insere a jtextfield tfValorFabrica na coluna 4 da Jtable
   tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));

    Point click = new Point(evt.getX(), evt.getY());  
              
    int column = areaEstoque.columnAtPoint(click);  
    int row = areaEstoque.rowAtPoint(click);

    //pega o valor da celula clicada
    String celula = areaEstoque.getModel().getValueAt(row, column).toString();
    tfValorFabrica.setText(celula);
    tfValorFabrica.selectAll();    
    
}

não precisa expecificar a coluna do jeito que eu te disse. não tem nada ave com oque eu isse ai LOL. faz do jeito que eu disse que da certo.!

outra coisa use MouseRealeased.

W

fiz um teste aqui e ele pegou o valor dentro da célula clicada mesmo, porem o selectAll não funciona, ele não seleciona o conteudo dentro da célula, não sei se o JTable redireciona os eventos para os componentes do seu cell editor.

Segue a maneira que fiz:

TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);
   tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));

    Point click = new Point(evt.getX(), evt.getY());  
              
    int column = areaEstoque.columnAtPoint(click);  
    int row = areaEstoque.rowAtPoint(click);

    String celula = areaEstoque.getValueAt(areaEstoque.getSelectedRow(), column).toString();
    tfValorFabrica.setText(celula);
    tfValorFabrica.selectAll();
JoatanGuj
wesleypc:
fiz um teste aqui e ele pegou o valor dentro da célula clicada mesmo, porem o selectAll não funciona, ele não seleciona o conteudo dentro da célula, não sei se o JTable redireciona os eventos para os componentes do seu cell editor.

Segue a maneira que fiz:

TableColumn tableValorFabrica = areaEstoque.getColumnModel().getColumn(4);
   tableValorFabrica.setCellEditor(new DefaultCellEditor(tfValorFabrica));

    Point click = new Point(evt.getX(), evt.getY());  
              
    int column = areaEstoque.columnAtPoint(click);  
    int row = areaEstoque.rowAtPoint(click);

    String celula = areaEstoque.getValueAt(areaEstoque.getSelectedRow(), column).toString();
    tfValorFabrica.setText(celula);
    tfValorFabrica.selectAll();

você quer pegar o valor de uma celular selecionada em uma jTable e passar pra uma TextField certo? . o jeito que te mandei é exatamente isso.

W

Na verdade para min pouco importa o valor da celula clicada, o que eu realmente quero é que selecione o que esta dentro da célula clicada entende?

Por exemplo:

Célula na linha 0, na coluna 0, tem o valor 400 dentro dela.

Quando eu clicar na Célula da linha 0, da coluna 0 ele deixe selecionado o 400.

Entendeu?

JoatanGuj
wesleypc:
Na verdade para min pouco importa o valor da celula clicada, o que eu realmente quero é que selecione o que esta dentro da célula clicada entende?

Por exemplo:

Célula na linha 0, na coluna 0, tem o valor 400 dentro dela.

Quando eu clicar na Célula da linha 0, da coluna 0 ele deixe selecionado o 400.

Entendeu?

justamente oque eu te passei ^^.
se quiser usar uma ajuda mais aprofundada posso fazer pra você via team Viewer dai vc me pergunta as duvidas. mais oque eu te mandei aquela hora é exatamente oque você quer:

String pegarNome = minhaTable.getValueAt(minhaTable.getSelectedRow(), 0);// tem uma virgula 0 porque é a linha selecionada coluna 0.  
String pegarSobrenome =  minhaTable.getValueAt(minhaTable.getSelectedRow(), 1);// tem uma virgula 1 porque é a linha selecionada coluna 1.  
String pegarCPF = minhaTable.getValueAt(minhaTable.getSelectedRow(), 2);// tem uma virgula 2 porque é a linha selecionada coluna 2.  
  
//agora que ja temos os valor vamos "jogar" os valores na jTextField.  
nome.setText(pegarNome);  
sobrenome.setText(pegarSobrenome);  
cpf.setText(pegarCPF);  
//pronto ^^
W

Blz, vou almoçar aqui agora, e logo que eu voltar eu te do um toque para vc me dar uma ajuda ok?

Grato.

JoatanGuj

wesleypc:
Blz, vou almoçar aqui agora, e logo que eu voltar eu te do um toque para vc me dar uma ajuda ok?

Grato.

ok

W

Olá JoatanGuj,

voltei, por acaso vc poderia me passar seu msn para nós vermos esse caso?

Vlw

JoatanGuj

wesleypc:
Olá JoatanGuj,

voltei, por acaso vc poderia me passar seu msn para nós vermos esse caso?

Vlw

[email removido]

W

Ta adicionado, aceita lá!
xD

JoatanGuj

wesleypc:
Ta adicionado, aceita lá!
xD

aceitei

Criado 8 de setembro de 2011
Ultima resposta 9 de set. de 2011
Respostas 16
Participantes 2