Como ler do teclado, usando classe que não tem metodo addKeyListener?

10 respostas
Murilo_CIN

olá pessoal, estou com um problema: Quero ler comandos do teclado, porém minha classe extende “Window” de uma API chamada miniJava. O problema é que ela não possui o método addKeyListener ou semelhante. Existem maneiras simples de eu conseguir ler do teclado sem precisar mudar a classe que eu estou extendendo? Tem como eu criar um método que tenha a mesma função do addKeyListener?

Se alguem precisar ver a API, segue o link:
http://www.cin.ufpe.br/~if669/files/miniJava/1.3/doc/

10 Respostas

ramilani12

mas vc não pode implementar a Interface KeyListener?
Agora vc precisa verificar se API implementa a Interfce KeyListener

Murilo_CIN

tem na documentação de Window:

All Implemented Interfaces:
ClickListener, ItemStateListener, Listener

Eu posso implementar KeyListener, mas eu acho que para conseguir fazer o que eu quero, eu precisaria de uma linha de código no construtor parecida com:

this.addKeyListener(this);

mas quando eu digito isso, o Eclipse diz que não existe esse método.

Daria pra eu desenvolver esse método?

Leandro_R_Combinato
Meu amigo nao existe magica, vc tem q implementa o addkeyListener, siga meus passos, ok        

    texto1 = new JLabel("Nome: ");
    texto1.setBounds(700,1,150,20);
    papel.add(texto1);
    campo1 = new JTextField();
    campo1.setBounds(700,20,100,20);
    papel.add(campo1);
    campo1.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent evt) {
		int keyCode = evt.getKeyCode();
		if(keyCode == KeyEvent.VK_ENTER){
			campo4.requestFocus();
		}
	}});
Murilo_CIN

Eu queria que quando eu apertasse UP (arrow) acontecesse o mesmo que um click no Button “botao”.

import java.awt.event.KeyEvent;

import br.ufpe.cin.miniJava.gui.Button;
import br.ufpe.cin.miniJava.gui.Component;
import br.ufpe.cin.miniJava.gui.Window;

public class Keyboard04 extends Window{

	Button botao;
	int num;
	
	Keyboard04(){
		num = 0;
		this.botao = new Button("botao");
		this.include(botao, 10, 10);
		this.setSize(200, 200);
		this.setVisible(true);
		//Acho que aqui deveria ter algo como: this.addKeyListener(outroAlgo);
		//O problema eh que Window nao tem o metodo addKeyListener
	}

	public void clickEvent(Component c){
		if(c==botao){
			this.setTitle(this.num+1+"");
			this.num += 1;
		}
	}
	
	public void keyPressed(KeyEvent e){
		int key = e.getKeyCode();
		
		if(key==KeyEvent.VK_UP){
			botao.doClick();
		}
	}

	public static void main(String[] args) {
		new Keyboard04();

	}

}

O meu problema eh nao entra nunca no KeyPressed, acho q por falta de um KeyListener na janela. Alguem consegue solucionar?

ramilani12

Murilo_CIN:
tem na documentação de Window:

All Implemented Interfaces:
ClickListener, ItemStateListener, Listener

Eu posso implementar KeyListener, mas eu acho que para conseguir fazer o que eu quero, eu precisaria de uma linha de código no construtor parecida com:

this.addKeyListener(this);

mas quando eu digito isso, o Eclipse diz que não existe esse método.

Daria pra eu desenvolver esse método?

Aonde vc viu isso a Classe Window implementa essas interfaces?
Vc esta referindo desse pacote java.awt.Window? http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html

ramilani12

Pelo jeito vc esta uilizando a classe Window do pacote java.awt.WIndow mas vc precisa verifcar se essa classe br.ufpe.cin.miniJava.gui.Window implementa a Interface KeyListener

O que pode estar acontendo que compilador esteja referenciado do pacote java.awt e não br.ufpe.cin.miniJava.gui.Window

Murilo_CIN

ramilani12:
Murilo_CIN:
tem na documentação de Window:

All Implemented Interfaces:
ClickListener, ItemStateListener, Listener

Eu posso implementar KeyListener, mas eu acho que para conseguir fazer o que eu quero, eu precisaria de uma linha de código no construtor parecida com:

this.addKeyListener(this);

mas quando eu digito isso, o Eclipse diz que não existe esse método.

Daria pra eu desenvolver esse método?

Aonde vc viu isso a Classe Window implementa essas interfaces?
Vc esta referindo desse pacote java.awt.Window? http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html

Vi na documentacao da API: http://www.cin.ufpe.br/~if669/files/miniJava/1.3/doc/
Nao estou usando o Window de java.awt.Window. Uso o do miniJava, que nao tem o metodo addKeyListener.

Murilo_CIN

Ainda nao consegui fazer isso funcionar. Quem souber como resolver isso, por favor, me ajude. Isso eh muito importante pra mim. Com isso eu vou poder dar continuidade ao meu jogo que esta bem proximo de acabar. So falta conseguir mexer o “boneco” pelo teclado e outras coisinhas, mas esssas outras coisinhas ja estao sob controle. Preciso solucionar isso rapido, para acabar meu jogo antes do inicio das aulas, que comecam semana que vem.

ramilani12

Veja a documentacao essa classe não implementa a Interface keyListener

Então precisa implementa-la e os metodos keyReleased() , keyPressed() e keyTyped()

import java.awt.event.KeyEvent;

import br.ufpe.cin.miniJava.gui.Button;
import br.ufpe.cin.miniJava.gui.Component;
import br.ufpe.cin.miniJava.gui.Window;

public class Keyboard04 extends Window implements KeyListener
{

	Button botao;
	int num;
	
	Keyboard04(){
		num = 0;
		this.botao = new Button("botao");
		this.include(botao, 10, 10);
		this.setSize(200, 200);
		this.setVisible(true);
		
                this.botao.addKeyListener(this); // serao o botão que ira disparar o evento?
                
	}

	public void clickEvent(Component c){
		if(c==botao){
			this.setTitle(this.num+1+"");
			this.num += 1;
		}
	}
	
	public void keyPressed(KeyEvent e){
		int key = e.getKeyCode();
		
		if(key==KeyEvent.VK_UP){
			botao.doClick();
		}
	}

	public static void main(String[] args) {
		new Keyboard04();

	}

}
Murilo_CIN

Eu quero que quando eu pressionar UP (teclado) ocorra o evento do Button botao. O que eu nao sei eh fazer com que algo ocorra quando eu pressionar UP, qualquer algo. Nunca entra no metodo KeyPressed.
Ja tentei implementar KeyListener, mas continua na mesma. O problema ta na nao existencia de um metodo addKeyListener.
E a classe Button tambem nao tem o metodo addKeyListener, so tem addClickListener.

Criado 11 de setembro de 2007
Ultima resposta 11 de set. de 2007
Respostas 10
Participantes 3