Porém não estou conseguindo aplicar na solução que preciso, gostaria de saber se alguém poderia me ajudar.
A minha situação é a seguinte, tenho dentro de um JInterFrame um JTabbedPane e 3 botões - Incluir, Excluir e Sair.
Cada aba do JTabbedPane é uma classe herdando de JPanel com o formulário e os demais dados necessários. Cada um em uma classe diferente.
O que eu precisava é que de acordo com uma determinada situação dos dados desses JPanels, eu conseguisse alterar o estado destes botões do JInternalFrame. Como cada Aba herda de JPanel , não consigo herdar a classe Observable.
Como eu poderia fazer isto? Alguém poderia me ajudar?
Obrigado!
Esse é o problema da implementação do pardão Observer presente no Java. Não sei se tem uma solução melhor, mas já passei por isso e acabei implementando o padrão na mão mesmo, fazendo Observer ser uma interface.
Para se basear em uma implementação, você pode consultar o capítulo que fala sobre o padrão no livro Head First Design Patterns.
O que eu preciso fazer é verificar se devo habilitar ou desabilitar esses botões, de acordo com as regras de negócios…
Vc poderia me dar um exemplo com State?
Obrigado!!
Resolvi, segui o conselho do tnaires, criei duas interfaces
public interface Subject {
/**Adiciona uma classe que devem ser notificadas.*/
public void addObserver(Observer o);
/**Remove uma determinada classe da lista de classes que devem ser notificadas.*/
public void removeObserver(Observer o);
/**Notifica as classes observadoras de um determinado evento.*/
public void notifyObservers();
}
public interface Observer {
/**
* Recebe a notificação da classe que está sendo observada
* @param Observer - classe que está sendo observada.
* @param Object - notificação enviada da classe observada.
* */
public void update(Observer o, Object arg );
}
A classe que deve receber a notificação(Observadora) eu implementei a interface Observer , a classe que deve enviar a notificação(Observada) eu implementei a interface Subject.
De dentro da classe que deve Observadora eu adiciono a mesma na classe Observdora(JPanelItemMonitoramento).
getJPanelItemMonitoramento().addObserver(this);
Na classe observada eu utilizo o método notifyObservers() para mandar o que preciso para a classe observadora.
public void notifyObservers() {
Iterator i = observers.iterator();
while( i.hasNext() ) {
Observer o = (Observer) i.next();
/*O update está implementado na classe observadora*/
o.update(o, false);
}
}