Eventos sem objetos

17 respostas
H

Pessoal, em java eu sempre tenho q tratar eventos relacionados com algum objeto???
ex.: objeto.addKeyListener(…)

Eu criei uma classe que não extends nenhuma outra classe, mas eu queria q ela tratasse os eventos de teclado, como ela nao tem nenhum metodo de tratar eventos nela, como eu faço pra tratar???

flw!!!

17 Respostas

FilhoDoRei

Crie metodos que trate dos eventos na classe que não extends nada…

flwsss

novemberrain

me ajudaaaa??

ViniGodoy

Pode descrever melhor o problema?

H

Antes de continuar… vlw pessoal pela resposta rápida! :smiley:
Eu criei essa classe ai em baixo soh pra explicar melhor minha dúvida! Como eu relaciono esses métodos da interface KeyListener com a classe ClasseSoma sendo que a classe ClasseSoma não possui o método addKeyListener()???

public class ClasseSoma implements KeyListener{

private int a, b, soma;

public ClasseSoma(int a, int b){

soma = 0;

this.a = a;

this.b = b;

}

public void keyPressed(KeyEvent e){

soma = a + b;

}

public void keyReleased(KeyEvent e){}

public void keyTyped(KeyEvent e){}

}
ViniGodoy

Quem tem o addKeyListener é quem gera o evento.
Quem implementa o KeyListener é quem trata o evento.

Lá na interface gráfica da sua aplicação você faria:

Soma s = new Soma(); seuJTextField.addKeyListener(s);

Tá certo que essa implementação de KeyListener na sua classe Soma está bem estranha. O que você quer fazer exatamente?

ViniGodoy

Ah, outra dica… quando for posta código, usa a tag code.
Se você ainda não sabe fazer isso, dá uma lida aqui:
http://www.guj.com.br/posts/list/50115.java

H

Mas não tem como essa minha classe gerar o evento de teclado como nas outras linguagens??? :?

ViniGodoy

Agora eu entendi. Use para isso a classe Robot.
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Robot.html

H

tipo, eu tenho uma classe e quero q quando o usuário teclar uma tecla no teclado essa classe faça alguma coisa, como por exemplo, somar dois inteiros!

H

vlw kra!!! vo dar uma olhada!

ViniGodoy
Agora, normalmente, nós geramos outros tipos de eventos em classes de negócio. Por exemplo:
public interface SomaListener {
    void somaRealizada(int a, int b, int soma);
}


public class Soma {
    private int a;
    private int b;
    private int soma;

    private Set<SomaListener> listeners = new HashSet<SomaListener>();

    public void addListener(SomaListener listener) {
        listeners.add(listener);
    }

    public void removeListener(SomaListener listener) {
        listeners.remove(listener);
    }

    protected void fireSomaRealizada(int a, int b, int soma) {
       for (SomaListener listener : listeners) {
          listener.somaRealizada(a, b, soma);
       }
    }

    private void somar() {
         soma = a+b;
         fireSomaRealizada(a, b, soma);
    }

    public int getSoma() {
        return soma;
    }
}

Ok, o exemplo é meio bobo. Mas mostra como gerar o listener, disparar o evento, etc. Você ainda poderia agrupar todos os parâmetros que o listener recebe num único objeto SomaEvent. É uma boa prática fazer isso, já que torna a inclusão de mais uma informação no evento muito mais fácil.

ViniGodoy

Então você não quer gerar um evento de teclado, mas ouvir um.
A forma mais simples de fazer isso é, na sua interface gráfica, capturar o evento do teclado de algum dos seus componentes, e então chamar o método da classe Soma.

Peraí, vc tem uma interface gráfica?

F
ViniGodoy:
Agora, normalmente, nós geramos outros tipos de eventos em classes de negócio. Por exemplo:
public interface SomaListener {
    void somaRealizada(int a, int b, int soma);
}


public class Soma {
    private int a;
    private int b;
    private int soma;

    private Set<SomaListener> listeners = new HashSet<SomaListener>();

    public void addListener(SomaListener listener) {
        listeners.add(listener);
    }

    public void removeListener(SomaListener listener) {
        listeners.remove(listener);
    }

    protected void fireSomaRealizada(int a, int b, int soma) {
       for (SomaListener listener : listeners) {
          listener.somaRealizada(a, b, soma);
       }
    }

    private void somar() {
         soma = a+b;
         fireSomaRealizada(a, b, soma);
    }

    public int getSoma() {
        return soma;
    }
}

muito bom esta exemplo

Ok, o exemplo é meio bobo. Mas mostra como gerar o listener, disparar o evento, etc. Você ainda poderia agrupar todos os parâmetros que o listener recebe num único objeto SomaEvent. É uma boa prática fazer isso, já que torna a inclusão de mais uma informação no evento muito mais fácil.

H

acho q deve ter bastante gente com a mesma dúvida! :?:
vlw ViniGodoy! :smiley:
flw!!! 8)

H

Então você não quer gerar um evento de teclado, mas ouvir um.
A forma mais simples de fazer isso é, na sua interface gráfica, capturar o evento do teclado de algum dos seus componentes, e então chamar o método da classe Soma.

Peraí, vc tem uma interface gráfica?

Entao eu quero q uma classe qualquer minha ouça um evento! Agora consegui ser claro?

flw!

H

nao tem como fazer isso como no C++??? :cry: senão tiver como, tudo bem galera! :roll: vou ouvir o evento na interface grafica mesmo e assim chamar os metodos na minha classe! :twisted:

vlw!!! flw!!! 8)

H

Então você não quer gerar um evento de teclado, mas ouvir um.
A forma mais simples de fazer isso é, na sua interface gráfica, capturar o evento do teclado de algum dos seus componentes, e então chamar o método da classe Soma.

Peraí, vc tem uma interface gráfica?

mas eu não tenho uma interface gráfica! minha aplicação está rodando sem uma interface gráfica, apenas com uma Thread q não deixa a aplicação finalizar! Ae eu queria deixar minha aplicação rodando lá no trayicon e q ela ouvisse os eventos e teclado (sem interface grafica mesmo)! Em C++ eu sei q tem como fazer isso, mas queria continuar usando o Java mesmo! Em Java, não tem como ouvir eventos sem uma interface gráfica???

T+!

Criado 12 de julho de 2008
Ultima resposta 9 de dez. de 2008
Respostas 17
Participantes 5