Açoes do teclado?

10 respostas
sanson

:shock:
Oi!
Estou precisando fazer o seguinte:

  • Quando eu prescionar a tecla ESC eu quero fechar o meu InternalFrame, só que eu não sei como pegar quando é prescionado a tecla!!!

Se alguem souber me ajuda!!

Luiz Bernardo

10 Respostas

ricardolecheta

faz tempo que nao mecho com isso :slight_smile:

mas coloque um KeyListener e no método keyPressed(KeyEvent e)
verifique se foi pressionada a tecla ESC…

tem uma constante VK_ESCAPE na classe KeyEvent…
vc tb pode recuperar o código ascii através do metodo e.getKeyCode()

o código ascii do ESC é 27 :slight_smile:

sanson

Tu tem como me mandar um exemplo!

luiz_ross

Use a interface KeyListener
De uma olhada aki
http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

sanson

No meu InternalFrame tem uns 25 JTextFields!
Eu vou ter que atribuir uma ação para cada um deles???

não tem um jeito mais facil?

Luiz Bernardo

Shelson

O que vc quer é mais ou menos isso ?

class NomedaClasse extends KeyAdapter {

public void keyTyped(KeyEvent e) {

char c = e.getKeyChar();

// implementa se a tecla pressionada é a Tecla ESC

if (c == KeyEvent.VK_ESCAPE )

facaAlgumaCoisa();

// implementa se é um dígito ou um traço

if (!Character.isDigit© && (c != -))

facaOutraCoisa();

}

}

Mr. F

fenrir

Você pode usar este código, aí não vai precisar colocar o listener em cada um dos campos:

KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true); getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks,"CancelAction"); getRootPane().getActionMap().put("CancelAction", new AbstractAction() { public void actionPerformed(ActionEvent ae) { // fechar a janela } });

E

É melhor criar uma única classe interna que serve como ouvidora de eventos para todos os objetos da classe principal.

R

pessoal, estou tentando colocar o codigo abaixo dentro do jpanel da tela principal do meu sistema, para que ele responda ao teclar o F2, mas ainda nao consigo fazer funcionar. Alguem pode me ajudar nisso?

KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true);
 getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks,"CancelAction");
 getRootPane().getActionMap().put("CancelAction", new AbstractAction() {
     public void actionPerformed(ActionEvent ae) {
         // fechar a janela
     }
 });

T+

nightcrowls

Não to conseguindo adicionar uma imagem no jDesktopane. tenho meu programa, com janelas jInternalFrame e a janelaPrincipal que é um frame com jDesktopPane, quando executo o programa principal, quero q apareça uma imagem ou figura q eu qero colocar, só q não estou conseguindo fazer isso alguém sabe me dizer como posso fazer, até vi alguns ex: na aqi no GUJ mas nenhum funcionou. ou melhor não consegui. bl.

ViniGodoy

nightcrowls:
Não to conseguindo adicionar uma imagem no jDesktopane. tenho meu programa, com janelas jInternalFrame e a janelaPrincipal que é um frame com jDesktopPane, quando executo o programa principal, quero q apareça uma imagem ou figura q eu qero colocar, só q não estou conseguindo fazer isso alguém sabe me dizer como posso fazer, até vi alguns ex: na aqi no GUJ mas nenhum funcionou. ou melhor não consegui. bl.
3

Nightcrowls,
Não pegue carona no tópico dos outros!!!

Sansom,

Olha, esse negócio de fechar com o ESC. O jeito ideal é com o InputMap e o ActionMap, como mostrou o fenrir ali em cima. O KeyListener dá muito trabalho e é muito sujeito a erros, já que é fácil incluir um componente depois e esquecer de adicionar o listener. Você pode ver um post mais detalhado sobre isso aqui: http://www.guj.com.br/posts/list/47289.java#258583

Além disso, há situações em que os listeners não funcionam como deveriam, como por exemplo, quando nenhum componente tem o foco.

Agora… Eu usei esse negócio do ESC numa aplicação e notei uma desvantagem: Quando o usuário fica impaciente, ele acaba pressionado ESC.

Se o seu processamento demorado estiver na thread do Swing, o que vai ocorrer é que a janela continuará parada processando e só fechara quando finalmente for preenchida com a informação que o usuário quer. Ele tem um vislumbre do dado por alguns centézimos de segundos, quando a janela finalmente processa o esc e fecha. Sacanagem, não?

Se seu processamento não estiver na thread do Swing, a janela fecha na hora. Menos irritante, mas muitas vezes não é exatamente o que o usuário esperava.

Então, pense 2 vezes antes de adicionar um comportamento que não é o padrão do seu ambiente de janelas.

Criado 12 de setembro de 2003
Ultima resposta 7 de jul. de 2008
Respostas 10
Participantes 9