Array
(
)

Trocando TAB por ENTER

Nadia Marques
   - 09 abr 2009

Sou novata em Java, entrei agora no portal javafree e vi esse código abaixo. Gostaria de tirar algumas dúvidas, se for possível: aonde devo colocar esse código? Inseri no inicio da minha classe e deu erro na variável frame, vcs poderiam me dizer o que é? Gostaria de, para passar de um campo ao outro do formulário, apertar ENTER ao invés de TAB, mas sem colocar o código em cada FocusLost.. // Colocando enter para pular de campo HashSet conj = new HashSet(frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj); Sds Nadia

Vitor Pamplona
   - 09 abr 2009

Fala Nadia, Vc pode colocar no ponto de inicialização do sistema. Já que, ao executar este código, o sistema inteiro será alterado. []s

0
|
0

Andre Valdestilhas
   - 09 abr 2009

Booooooooooaaaaaaa Eu não conhecia essa pra trocar o Tab pelo Enter... Valeu !!!

0
|
0

Vitor Pamplona
   - 09 abr 2009


Citação:
="firmao"]Booooooooooaaaaaaa Eu não conhecia essa pra trocar o Tab pelo Enter... Valeu !!!
Tem coisas que só o Swing faz por você! :P

0
|
0

Nadia Marques
   - 09 abr 2009

Oi Vitor, eu coloquei o código no início da classe, mas dá erro na classe HashSet diz "Cannot find symbol" e tbm nas variáveis frame e KeyEvent. Sds Nadia

0
|
0

Vitor Pamplona
   - 09 abr 2009

Precisa adicionar os imports: #Código

import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.HashSet;

0
|
0

Nadia Marques
   - 09 abr 2009

Vitor, porque tenho que importar uma classe específica, como por exemplo import java.awt.KeyboardFocusManager;, eu importei como java.awt.*; ele já não deveria funcionar? sds Nadia

0
|
0

Nadia Marques
   - 09 abr 2009

Vitor, último problema... dá erro na variável frame, essa variável não faz parte dos métodos das classes? Ou tenho que declará-la? Se tiver declaro como o que? Sds Nadia

0
|
0

Vitor Pamplona
   - 09 abr 2009

Aí teria que ser assim: #Código

import java.awt.*;
import java.awt.event.*;
import java.util.*;
Ou seja, para cada package e subpackage, vc teria que adicionar um import "global" []s

0
|
0

Nadia Marques
   - 09 abr 2009

Vitor, último problema... dá erro na variável frame, essa variável não faz parte dos métodos das classes? Ou tenho que declará-la? Se tiver declaro como o que? Sds Nadia

0
|
0

Vitor Pamplona
   - 09 abr 2009

frame é o teu JFrame principal. hum... talvez seja necessário colocar este código em cada tela (JFrame) que você usar.

0
|
0

Nadia Marques
   - 09 abr 2009

Mas ele está no Frame. Segue uma parte do código: import javax.swing.*; import java.sql.*; import java.awt.AWTKeyStroke; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent; import java.util.HashSet; import javax.swing.JFrame; public class Produto extends javax.swing.JFrame { /** Creates new form Produto */ public Produto() { initComponents(); setBounds(130,80,670,580); // Colocando enter para pular de campo HashSet conj = new HashSet(frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj); . . . E continua dando erro na variável frame... Sds Nadia

0
|
0

Vitor Pamplona
   - 09 abr 2009

Use this ao invés de frame. O this referencia ao próprio objeto.

0
|
0

Nadia Marques
   - 09 abr 2009

Muito obrigada Vitor, deu certo!! Sds Nadia

0
|
0

Nadia Marques
   - 09 abr 2009


Citação:
="vfpamp"]Use this ao invés de frame. O this referencia ao próprio objeto.
sdfasfasdfasdfasdff

0
|
0

Nadia Marques
   - 09 abr 2009


Citação:
="geyond"]
Citação:
="vfpamp"]Use this ao invés de frame. O this referencia ao próprio objeto.
sdfasfasdfasdfasdff
safasfasdfasdfasdfasfasfasdf3222222222222222222

0
|
0

Nadia Marques
   - 09 abr 2009


Citação:
="vfpamp"]
Citação:
="firmao"]Booooooooooaaaaaaa Eu não conhecia essa pra trocar o Tab pelo Enter... Valeu !!!
Tem coisas que só o Swing faz por você! :P
Vitor, Desculpe minha ignorância, mas esse código é útil quando? pois normalmente temos que codificar alguma coisa no ActionPerformed() do campo pra validar ou testar alguma coisa, não? acrescentando um nextField.requestFocusInWindow() lá no ActionPerformed() não daria no mesmo? ou o código é justamente uma alternativa para o requestFocusInWindow() ? vlw Hwo

0
|
0

Vitor Pamplona
   - 09 abr 2009


Citação:
="Hwoarang"] Vitor, Desculpe minha ignorância, mas esse código é útil quando? pois normalmente temos que codificar alguma coisa no ActionPerformed() do campo pra validar ou testar alguma coisa, não? acrescentando um nextField.requestFocusInWindow() lá no ActionPerformed() não daria no mesmo? ou o código é justamente uma alternativa para o requestFocusInWindow() ?
Bom, se você quiser fazer isso em cada componente, até mesmo naqueles que não há evento em actionPerformed, fique a vontade. Pelo que eu entendi, vc indica qual será o próximo componente com o nextField. Não esqueça de testar se o próximo componente pode receber o foco, e se está na ordem correta. Eu prefiro alterar a tecla para troca de campo que o Swing usa, já que ele dá essa opção. Além de ser mais correto, eu não corro o risco de esquecer alguma coisa e ter que duplicar código por aí. Além do que se o Swing mudar algum tratamento de foco, não vou precisar me preocupar com isso. []s

0
|
0

Vitor Pamplona
   - 09 abr 2009

hmmm. interessante. Vitor, vc poderia me passar o link original onde tem o código? grato. outra coisa: o código obedece o nextFocusableComponent pra saber pra onde enviar o foco ? Hwo

0
|
0

Vitor Pamplona
   - 09 abr 2009

Esse? http://www.javafree.org/javabb/viewtopic.jbb?t=12842
Citação:
outra coisa: o código obedece o nextFocusableComponent pra saber pra onde enviar o foco ?
Eu só alterei a tecla que deve ser considerada como trocadora de campos. O resto o Swing faz.

0
|
0

Revelino Santos
   - 09 abr 2009

Vitor, 1-Com relação ao ENTER, quando utilizamos o TraversalKeys, na verdade o focus fica pulando conforme ordenamento dos mesmos, agora tem a situação que que o botão não aceita o ENTER para realizar a ação do click e não adianta tratar pelo KeyPress do Frame ou do próprio botão que como está configurado utilizar a tecla ENTER no TraversalKey, o mesmo desconsidera essa tecla para ser tratada no Frame. Para resolver esse problema faço o seguinte: Botao.setFocusTraversalKeysEnabled(false); Para os JTextField que por alguma situação preciso validar, faço a mesma situação e utilizo os eventos do Frame Você tem outra solução para esta situação? 2-JTable, ao teclar ENTER no mesmo ele pula para o próximo registro(Item) que está sendo visualizado Você tem alguma idéia para solucionar o item 2? Abraços e muito obrigado

0
|
0