Mudar foco em uma JTable ao digitar enter em uma célula

Bom dia pessoal,

Estou com um problema que não consegui resolver. Tenho uma classe que estende JTable e implementa o metodo changeSelection que é para quando uma célula receber o foco, o texto ja ficar selecionado, mas quando digito enter na célula primeiro eh dado um “commit” na célula para só depois o foco ser enviado para a proxima célula. Alguém poderia dar uma ideia de como fazer com que o usuário digite enter na célula e o foco ja vá direto para a próxima celula? desde ja agradeço.

Oi,

Por default, a ação do ENTER em uma JTable faz descer a linha.

Uma vez, fiz um método para solucionar este problema.:

[code]public void TableEnterAction(JTable ao_table) {

InputMap im = ao_table.getInputMap(ao_table.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);   
	  
KeyStroke lo_key_enter = KeyStroke.getKeyStroke("ENTER");   
  
im.put(lo_key_enter, im.get(KeyStroke.getKeyStroke(KeyEvent.VK_GREATER, 0)));  
        
    Action
    enterAction		=	new AbstractAction()
{	
       	public void	actionPerformed(ActionEvent evt)
        {
        	// Requisita o foco para a outra celula.
        }; 
        
	ao_table.getActionMap().put(im.get(lo_key_enter), enterAction); 
}

}[/code]

Tchauzin!

Olá lina, é o seguinte, eu ja tinha feito o enter passar para a célula do lado, o meu problema é que quando o texto está selecionado e eu aperto enter, a celula é “commitada” pra só no segundo enter ela pular para a célula do lado. Então, pular para a linha do lado eu ja consegui, o problema é que eu quero que o foco vá direto para a célula do lado no primeiro enter, dando o commit direto e pulando direto para a próxima célula. Se você puder me ajudar te agradeço.
Arlei

Oi,

Agora consegui compreender o problema!

Essa celula tem que ser editavel ?

Tchauzin!

Oi lina, tem que ser editável, porque nela o usuário vai digitar diversas informações. Tens alguma dica para mim substituir uma JTable por outro componente que pode ter uma linha abaixo da outra igual uma jtable? obrigado pela atenção
Arlei

Oi,

Outro componente que faz isso… acho que não…
mas você poderia tirar a celula editavel e para mudar/alterar o valor
criar um botão ou então na ação do duplo click etc…

Pense em mudar a maneira de editar um valor da celula e não em mudar o componente.

Tchauzin!

Poisé, mas realmente não da, tem quer ser editável. Vou continuar a procura, obrigado pela atenção lina e se alguém souber como fazer, eu agradeço

Arlei

Alguém poderia me ajudar?

Oi,

Olha nós novamente +)

Achei um método que você precisa…

O stopCellEditing() deverá ser chamado antes de clicar na tecla ENTER:

http://java.sun.com/j2se/1.3/docs/api/javax/swing/CellEditor.html#stopCellEditing()

Tchauzin!

Oi lina, ja havia tentado com isso tambem, mas nao surtiu efeito. Vou continuar na batalha. Obrigado pela atencao.

Olá Lina estou tentando usar o seu código mas nao consigo, ele da erro no ultimo código…

postarei pra voces me ajudarem…


    public void TableEnterAction(JTable jTable1) {   
  
    InputMap im = jTable1.getInputMap(jTable1.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);     
             
    KeyStroke lo_key_enter = KeyStroke.getKeyStroke("ENTER");     
         
    im.put(lo_key_enter, im.get(KeyStroke.getKeyStroke(KeyEvent.VK_GREATER, 0)));     
               
        Action   enterAction     =   new AbstractAction()  
                 
    {     
            public void actionPerformed(ActionEvent evt)   
            {   
                // Requisita o foco para a outra celula.   
            }   
               
        jTable1.getActionMap().put(im.get(lo_key_enter), enterAction);
    
    }   
} 

O erro está nessa linha aqui… [color=red] jTable1.getActionMap().put(im.get(lo_key_enter), enterAction);[/color]

o erro é ‘;’ expected…

Oi,

Faltou um ‘)’

Tchauzin!

Tópico movido para o fórum de interface gráfica.