KeyPressed em um JLabel [RESOLVIDO]

3 respostas
L

Olá.

O título do tópico não esclarece muito bem qual é a minha dúvida, então vou tentar explicar melhor. Antes de tudo, gostaria de ressaltar que usei o sistema de busca do fórum (e muitos outros) antes de criar o tópico, mas pelo fato de não ser uma dúvida muito específica, a lista de tópicos encontrados ficou muita extensa e, portanto, não consegui encontrar uma solução para o meu problema. Problema que, a princípio, parece bem simples: como reconhecer que uma tecla do teclado foi pressionada sem precisar usar um componente que receba o valor dessa tecla (como um JTextField ou JTextArea). Por algum motivo todos os tutoriais, tópicos, posts, etc, que eu achei sobre o assunto relacionam o evento KeyPressed a um desses 2 componentes. Mas no meu caso, eu não pretendo usar nenhum deles. Digamos que eu tenha um JFrame com um JLabel dentro e que, quando uma tecla do teclado for pressionada, a propriedade Text desse JLabel receba o valor da tecla. Como proceder? Deu para entender a minha dúvida?

Espero que possam me ajudar.

Obrigado,
Lucas

3 Respostas

L

Consegui resolver o meu problema, portanto não precisam mais me ajudar. Desculpem-me por tornar o tópico inútil.

L

Se resolveu, posta a solução aí para que outros que estiverem com a mesma dúvida e estiverem pesquisando por aqui achem a sua solução!
Também posta no título do tópico como [RESOLVIDO]

L

A solução foi criar uma classe extendendo KeyAdapter para monitorar o teclado.

/**
 * KeyMonitor class
 * @author Lucas Ramos
 */
class KeyMonitor extends KeyAdapter {
    private JPanel panel;

    /**
     * Class constructor
     * @param panel the intended panel
     */
    KeyMonitor(JPanel panel) {
        this.panel = panel;
    }

    /**
     * Method to detect the pressed key
     * @param event the key event
     */
    public void keyPressed(KeyEvent evt) {
        //Aqui executa o código desejado, como por exemplo:
        //panel.getLabel().setText("" + evt.getKeyChar());
    }
}
Dessa forma, temos:
JPanel panel1 = new JPanel();
KeyMonitor monitor = new KeyMonitor(panel1);
panel1.setFocusable(true);
panel1.addKeyListener(monitor);
Lembrando que o JPanel em questão deve sempre requisitar o foco na janela:
panel1.requestFocusInWindow();

Espero que isso possa ser útil.

Valeu!

Criado 1 de setembro de 2010
Ultima resposta 2 de set. de 2010
Respostas 3
Participantes 2