[resolvido] disparar evento quando linha receber focu e nao jtable

6 respostas
A

ola pessoal, tenho um metodo que dispara um evento quando a tabela recebe o focus, segue o codigo abaixo…
esta funcionando, porem eu clico em uma linha e ele dispara o evento, porem se troco de linha com o teclado (colocando seta apra baixo)
ele nao dispara, entenderam?
o que preciso eh disparar esse evento mesmo quando trocada de linha pelo teclado!
estou a muitos dias tentando isso e nao consigo, acredito que alguem aqui ha de me ajudar :smiley:

private void jTable1FocusGained(java.awt.event.FocusEvent evt) {                                    
    //colocando dados da linha nos jtextfield
    int cont = 0;
    while(cont<classesExames.size()){
            codTabela = (String) jTable1.getValueAt(jTable1.getSelectedRow(), 0);
            codObjetos = classesExames.get(cont).getCod();
             
            if(codTabela.equals(codObjetos)){
                 jTData.setText(classesExames.get(cont).getData());
                 jTDescricao.setText(classesExames.get(cont).getDescricao());
                 jTOperadora.setText(classesExames.get(cont).getOperadora());
                 jTReferencia.setText(classesExames.get(cont).getReferencia());
            }
            cont++;
    }

    //colocando focu na referencia
    jTReferencia.requestFocus();
    //deixando ativos os jtextfields
    jTReferencia.setEnabled(true);
    jTDescricao.setEnabled(true);
    //ativando botoes
    jBEditar.setEnabled(true);
    jBDeletar.setEnabled(true);
}

6 Respostas

R
tabela.getSelectionModel().addListSelectionListener(
  new ListSelectionListener() {
    @Override public void valueChanged(ListSelectionEvent e) {
      // Processamento para mudança na linha selecionada
    }});
tabela.getColumnModel().getSelectionModel().addListSelectionListener(
  new ListSelectionListener() {
    @Override public void valueChanged(ListSelectionEvent e) {
      // Processamento para mudança na coluna selecionada
    }});
A

roger_rf, sem palavras! estava procurando isso a alguns dias, coloquei dentro do metodo construtor e funcionou que é uma beleza!!
agora sem querer abusar, quando estou com alguma linha selecionada e aperto tab ele troca de celula!
como fazer para o tab trocar o focus para outro componente? Abraço

R

Infelizmente não sei se o código abaixo vai funcionar, mas não custa tentar:

AbstractAction action = new AbstractAction() {
  @Override public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();
    if (source instanceof Component) ((Component) source).transferFocus();
  }};
KeyStroke keyStroke = KeyStroke.getKeyStroke("TAB");
String nomeAction = "acaoTab";
tabela.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, nomeAction);
tabela.getActionMap().put(nomeAction, action);
A

neste codigo troco somente o nome da tabela e no lugar do componente coloco o compenente que eu quero que recebe o focu, correto?

R

Basta trocar o nome da tabela, o componente que receberá o foco será aquele que estiver imediatamente depois da tabela. Se você quiser jogar o foco para algum componente específico, troque o trecho a seguir:

Object source = evt.getSource();  
if (source instanceof Component) ((Component) source).transferFocus();

por:

componenteEspecifico.requestFocusInWindow();
A

funcionando perfeitamente!
sem palavras roger, muito obrigado mesmo!

Criado 3 de fevereiro de 2012
Ultima resposta 3 de fev. de 2012
Respostas 6
Participantes 2