Ajuda com KeyListener/KeyStroke

4 respostas
C

Olá pessoALL,

Estou começando a programar em Swing e estou tendo muita dificuldade…
Minha aplicação trabalha com informações de um arquivo XML onde o usuário seleciona tal arquivo após clicar em um botão que abre um ‘JFileChooser’… depois de ter escolhido o arquivo, seu caminho absoluto é exibido em um ‘JTextField’… até aí tudo bem… só que me deparei que o usuário pode digitar o caminho do arquivo diretamente no ‘JTextField’(sem clicar no botão que abre o ‘JFileChooser’) e é aí que está o problema…
Esse caminho, juntamente com o nome e a extensão do arquivo, deve ser válido para que eu possa habilitar outro botão…
Minha dúvida:
Vou ter que implemetar um ‘KeyListener’, Ok?
Terei que usar KeyStroke? (para ações do tipo: CTRL+V)

Alguém tem algum link? um exemplo? enfim… alguma dica/ajuda?

Obrigado.

4 Respostas

ViniGodoy

Você pode usar um KeyListener ou um DocumentListener mesmo.

O KeyStroke você usa caso queira capturar teclas em sua aplicação, mesmo que o componente em questão não tenha o foco. Para informações sobre o KeyStroke veja:
http://www.guj.com.br/posts/list/47289.java#258583

Para implementar um KeyListener você faz:

getJTextField().addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { getJButton().setEnabled(caminhoValido(getJTextField().getText()); } }):

Estou assumindo aqui que existe a função “caminhoValido()” em algum lugar da sua classe, que validará o caminho e que o método getJTextField() retorna o seu JTextField.

Só tome cuidado que o método KeyTyped não é disparado se o usuário usar o ctrl+C, ctrl+V. Se quiser se precaver disso também, considere o uso de um DocumentListener.

C

Caro ViniGodoy,

Acho que eu não consegui ser claro com o meu problema…
O ‘textField’, de início, já é habilitado(Enable)…
É uma verificação em tempo real… Eu tenho verificar cada caracter digitado pelo usuário, nesse textField, para saber se o que ele está escrevendo - caminho +nome e +extensão - do arquivo(objeto File) realmente existe para habilitar outro objeto(button).
É aí que eu gostaria de algum exemplo de como tratar isso… e tbem. no caso de um conj. de teclas ctrl+v, p.ex.

Valeu

ViniGodoy

???

Então, é exatamente isso que o código ali em cima faz. Só confundi pq estava habilitando (ou não) o textfield. Mas agora já foi corrigido! :slight_smile:

C

ViniGodoy,

Funcionou com o código que vc sugeriu. Eu estava dando uma “vaciladinha”; eu só substitui o ‘keyTyped’ por ‘keyReleased’ para capturar o evento depois de soltar a tecla.

Valeu

Criado 19 de janeiro de 2007
Ultima resposta 19 de jan. de 2007
Respostas 4
Participantes 2