Metodo de classe desconhecida

8 respostas
ijoaum

Blz galera?

seguinte… Estou quase arrancando os cabelos aqui… :stuck_out_tongue:

eu tenho um JFrame princinpal que é o meu menu, nele eu chamo varios JInternalFrames, que na verdade são classes minhas extendendo o JInternalFrame.

dentro dessas classes eu tenho metodos que eu criei.

agora eu quero botar uma toolbar no meu JFrame principal que irá chamar metodos dentro do Frame em foco.
mas quando eu dou um getSelectedFrame() ele me retorna um JInternalFrame o qual nao implementa o método que eu quero.

daria certo fazer assim:

CadPrd frame = (CadPrd) desktop.getSelectedFrame(); frame.metodo();

mas não posso fazer isso pq eu nao sei o nome da classe que vai estar em foco no momento do clique.

Alguma idéia? oO

Obrigado!

8 Respostas

E

c pode usar instanceof para descobrir q instancia estah vindo e chamar o método adequado.

christo

Você pode criar uma interface que tenha o método “metodo”, e suas classes implementarem esta interface.

ijoaum

mas por exemplo.

o getSelectedFrame(); me retorna um objeto do tipo JInternalFrame, então não adianta eu implementar uma interface na minha clase sendo que eu não vou ter o objeto do tipo CadPrd.

entendeu?

christo

Sim, mas como você tem certeza que o JInternalFrame que será retornado foi criado por você (no seu exemplo o CadPrd) você pode fazer o Cast para uma variável do tipo da sua Interface.
Como no java não existe herança múltipla, Interface é “o cara” :slight_smile: para esse tipo de problema.

Abrs,

ijoaum

Sim, mas eu nao tenho certeza se será retornado o CadPrd pois eu tenho varios internalFrames:

CadPrd, CadFabricante e vários outros… O metodo pega o frame q está em foco, nesse caso não posso fazer cast! ^^

christo

É que eu tinha imaginado que você tinha criado várias classes herdando de JInternalFrames, todas com um mesmo método que precisasse ser chamado ao click do menu, neste caso este método poderia estar declarado na interface, e todas as suas JInternalFrames implementariam esta interface.

fabim

Se são ações em “menu”, subentende-se que sejam ações “comuns” a quaisquer JInternalFrames, correto?

Cria uma interface, nomeia-a como “InterfaceCadastro” algo assim sei la nomenclaturas vc analisa e ve o que condiz mais com seu sistema. Nessa interface vc poe as assinaturas dos metodos que vc vai chamar no menu.

Todos os seus “JinternalFrames”, devem implementar essa interface ( Ex: “CadFabricante extends JInternalFrame implements InterfaceCadastro”)… cada um deles vai fornecer a implementação do contrato definido na interface (os metodos), de acordo com sua funcionalidade.

Se seus internalFrames implementam InterfaceCadastro, entao vc pode referencia-los como tal. Nos eventos dos menus basta fazer:

InterfaceCadastro cadastro = (InterfaceCadastro)desktopPane.getSelectedFrame();
cadastro.metodoDefinidoNoContrato() ( Ex: salvar, inserir, excluir ).

Agora, se vc tem algo que seja ESPECIFICO daquele internalFrame, ai realmente vc vai te q apelar pro instanceof e fazer o cast pra
esse tipo especifico… mas com certeza, se for algo especifico assim nao deveria estar no “menu”.

ijoaum

@fabiocsi

Era EXATAMENTE isso…

Muito obrigado!

PROBLEMA RESOLVIDO!

Criado 11 de agosto de 2008
Ultima resposta 12 de ago. de 2008
Respostas 8
Participantes 4