Pessoal, necessito criar um evento que quando um metodo da classe Automovel() for executado , a classe Pessoa() fique sabendo
como devo proceder?
obrigado
Pessoal, necessito criar um evento que quando um metodo da classe Automovel() for executado , a classe Pessoa() fique sabendo
como devo proceder?
obrigado
Observer?
Você deve usar Observer.
Pattern: http://en.wikipedia.org/wiki/Observer_pattern
API: http://java.sun.com/javase/6/docs/api/java/util/Observer.html
certo, este observer concerteza deve funcionar…
porém , ele é um Evento?
é um trabalho … e diz que tenho que criar um evento pra fazer isso.
se o Observer for ta de boa…
valeu !
oi
vc leu os links?? o Observer é um padrão que sugere uma forma de registar objetos que serão avisados quando um determinado evento ocorrer
este evento pode ser qualquer coisa, como um clique em um botão, uma atualização de uma tabela no banco, etc
abs
sim , exato , ai que está…
o que está pedindo no exercicio é que eu crie um Evento para quando um metodo da classe x rodar ele avise a classe y
se eu usar o observer pode até funcionar, porém estaria saindo do foco sendo que o exercicio pede para eu criar um Evento.
abraço
pelo contrário
você irá criar um evento seu, e irá registar componentes para serem avisados quando o evento ocorrer
aqui tem um artigo bem completo com exemplos de código em java
abs
certo, eu li todos os exemplos e executei
vejam como ficou..
Classe que está sendo Observada
import java.util.*;
public class Automovel extends Observable {
public Automovel() {
}
public void locomover(){
setChanged();
notifyObservers("Método locomover() foi executado");
}
}
e está é a classe que Observa a outra e é avisada.
import java.util.*;
public class Pessoa implements Observer{
public Pessoa(){
Automovel obj = new Automovel();
obj.addObserver(this);
obj.locomover();
}
@Override
public void update(Observable obj, Object resp) {
System.out.println(resp);
}
public static void main(String[] args) {
}
}
o que quero é que quando o metodo locomover() for executado , ele avise a classe Pessoa.
Eu não entendo muito de java, mas talvez ele até esteja avisando, mas gostaria de entao imprimir um texto por exemplo para ter garantia.
Obrigado
Provavelmetne se vc criar uma instancia da classe Pessoa, vai funcionar, tipo:
public static void main(String[] args) {
Pessoa p = new Pessoa();
}
Porque ai vai executar todo esse pedaco de codigo que tem no construtor Pessoa
public Pessoa(){
Automovel obj = new Automovel();
obj.addObserver(this);
obj.locomover();
}
Nao testei, mas eu acho que eh isso.
//Daniel
não te entendi muito bem..
tentei fazer o que voce disse mas nao consegui..
public void locomover(){
setChanged();
notifyObservers("Método locomover() foi executado");
}
tem como eu imprimir ele na classe Pessoa ?
import java.util.*;
public class Pessoa implements Observer{
public Pessoa(){
Automovel obj = new Automovel();
obj.addObserver(this);
obj.locomover();
}
public static void main(String[] args) {
}
@Override
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
}
}
Pessoal , estava falando com meu chefe e não poderei usar o Observer, pois se eu quiser estanciar mais 2 classes depois não vou poder..
confere?
estou tentando fazer com o Listener
mas está dificil
segui mais ou menos um exemplo que achei na net mas não estou conseguindo.
vejam como está meu codigo.
classes na ordem:
public class AutomovelEvent extends java.util.EventObject {
/**
*
*/
private static final long serialVersionUID = 1L;
public AutomovelEvent(Automovel source){
super(source);
}
}
public interface AutomovelListener extends java.util.EventListener {
void iniciarLocomocao(AutomovelEvent e);
void finalizarLocomocao(AutomovelEvent e);
}
public class AutomovelAdapter
implements AutomovelListener{
public void iniciarLocomocao(AutomovelEvent e) {
}
public void finalizarLocomocao(AutomovelEvent e) {
}
}
public class Automovel extends AutomovelAdapter {
private static final long serialVersionUID = 1L;
public void locoMover() throws InterruptedException{
iniciarLocomocao(null);
Thread.sleep(3000);
finalizarLocomocao(null);
}
}
public class Pessoa implements AutomovelListener {
public static void main(String[] args) throws InterruptedException {
}
@Override
public void finalizarLocomocao(AutomovelEvent e) {
System.out.println("FInalizou");
}
@Override
public void iniciarLocomocao(AutomovelEvent e) {
System.out.println("Iniciou");
}
}
No caso a interface AutomovelListener tem 2 métodos, preciso que:
ao um método deste ser executado ocorra um evento que diga a classe Pessoa que ele está sendo executado( posso colocar uma mensagem dai)
cheguei neste ponto, pelo que me falaram estou no caminho certo, só que agora empaquei !
Parece que tenho o Evento criado , mas não sei como direcionar ele a classe Pessoa.
Me ajudem ai se possivel !
ehehehe
abraço pessoal !
Pessoal , estava falando com meu chefe e não poderei usar o Observer, pois se eu quiser estanciar mais 2 classes depois não vou poder…
confere?
Hummmm ?!?!?!?
windsofhell
opa, ehehhee, desculpe cara, acho que não consegui me expressar bem..
enfim, tenho que usar estes Listeners no caso.
todos
pessoal, dei uma pesquisada e me disseram que dá pra fazer isso sem usar este monte de classes que estou usando
utilizando apenas a classe PESSOA e AUTOMOVEL
o esquema é dizer que o AUTOMOVEL é um objeto a ser escutado
e Pessoa é o LISTENER
dai preciso criar uma lista no listener pra quando algo executar no automovel ele me avisar..
alguem pode me ajudar?
tenho isso até entao..
public class Automovel extends java.util.EventObject{
private static final long serialVersionUID = 1L;
public Automovel(Automovel source) {
super(source);
}
public void iniciarLocomoção(){}
public void finalizarLocomoção(){}
public void locomover() throws InterruptedException{
iniciarLocomoção();
Thread.sleep(2000);
finalizarLocomoção();
}
}
public class Pessoa implements java.util.EventListener {
public static void main(String[] args) throws InterruptedException {
Automovel a ;
a = new Automovel(null);
a.locomover();
}
}
O que vc acha desta idéia aqui?
public class Application {
public static void main(String[] args) throws InterruptedException {
Automovel automovel = new Automovel();
automovel.addActionListener(new Pessoa());
automovel.addActionListener(new Estacionamento());
automovel.locomover();
}
}
public class Pessoa implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("PESSOA : "+e.getID()+" > "+e.getActionCommand());
}
}
public class Estacionamento implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ESTACIONAMENTO : "+e.getID()+" > "+e.getActionCommand());
}
}
public class Automovel {
public static int ACTION_INICIOU_LOCOMOCAO = 1;
public static int ACTION_FINALIZOU_LOCOMOCAO = 2;
private List<ActionListener> listeners = new ArrayList<ActionListener>(0);
public void addActionListener(ActionListener listener) {
this.listeners.add(listener);
}
public void iniciarLocomoção(){
for(ActionListener listener : listeners) {
listener.actionPerformed(new ActionEvent(this,ACTION_INICIOU_LOCOMOCAO,"INICOU A LOCOMOÇÃO"));
}
}
public void finalizarLocomoção(){
for(ActionListener listener : listeners) {
listener.actionPerformed(new ActionEvent(this,ACTION_FINALIZOU_LOCOMOCAO,"FINALIZOU A LOCOMOÇÃO"));
}
}
public void locomover() throws InterruptedException{
iniciarLocomoção();
Thread.sleep(2000);
finalizarLocomoção();
}
}
É isso ai...espero ter ajudado em alguma coisa.
flws
cara ! creio que é exatamente isso
daqui eu me viro agora.
obrigado ein !
abraço
fantomas
Amigão , é isso ai, consegui !
muito obrigado !

Olá, só pra ficar registrado :
o exemplo do fantomas está correto.
fiz o dele e fiz de um outro jeito..
vou deixar aqui pra se alguem um dia precisar..
public class AutomovelEvent extends java.util.EventObject{
/**
*
*/
private static final long serialVersionUID = 1L;
public AutomovelEvent(Automovel source) {
super(source);
}
}
public interface AutomovelListener extends java.util.EventListener {
void iniciou(AutomovelEvent e);
void finalizou(AutomovelEvent e);
}
public class AutomovelAdapter implements AutomovelListener {
static Automovel automovel = new Automovel();
@Override
public void finalizou(AutomovelEvent e) {
System.out.println("O Automovel finalizou Locomoção");
}
@Override
public void iniciou(AutomovelEvent e) {
System.out.println("O Automovel iniciou Locomoção");
}
}
import java.util.ArrayList;
import java.util.Collection;
public class Automovel {
private Collection <AutomovelListener> ArrayListeners = new ArrayList<AutomovelListener>();
public void addActionListener(AutomovelListener listener) {
if(!ArrayListeners.contains(listener)) {
ArrayListeners.add(listener);
}
}
public void iniciarLocomoção(){
Collection <AutomovelListener> tl;
synchronized (this) {
tl = (Collection)(((ArrayList)ArrayListeners).clone());
}
AutomovelEvent evento = new AutomovelEvent(this);
for (AutomovelListener t : tl) {
t.iniciou(evento);
}
}
public void finalizarLocomoção(){
Collection <AutomovelListener> t2;
synchronized (this) {
t2 = (Collection)(((ArrayList)ArrayListeners).clone());
}
AutomovelEvent evento = new AutomovelEvent(this);
for (AutomovelListener t : t2) {
t.finalizou(evento);
}
}
public String calibrarPneu(int tpoCalibragem){
String calib = null;
switch(tpoCalibragem){
case 1:
calib = "Viajem";
break;
case 2:
calib = "Cidade";
break;
}
return calib;
}
public void locomover() throws InterruptedException{
iniciarLocomoção();
Thread.sleep(2000);
finalizarLocomoção();
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Pessoa extends AutomovelAdapter {
static Automovel automovel = new Automovel();
public static void main(String[] args) throws InterruptedException {
Pessoa pes = new Pessoa();
automovel.addActionListener(pes);
automovel.locomover();
}
@Override
public void iniciou(AutomovelEvent e) {
super.iniciou(e);
System.out.println("utilizando tipo de calibragem para "+ automovel.calibrarPneu(1));
}
@Override
public void finalizou(AutomovelEvent e) {
super.finalizou(e);
System.out.println("utilizando tipo de calibragem para "+ automovel.calibrarPneu(2));
}
}
Neste caso a 2 eventos.
valeu !