Jump to content

Recommended Posts

Posted

Tenho o backend com as minhas classes e tudo mais organizado num package. Num package diferente tenho que desenvolver a GUI.

Para comunicar com a package do backend, necessito de importar as classes do package backend, para o GUI...correto?

No entanto, como faço para "chamar" métodos disponíveis na classed do backend?

Supondo que tenho o seguinte código:

public class Cao{

//restante código

public void mostrarCaes() {
 for(Cao cao: caes){
	 System.out.println(cao.toString());
}
}
}

Como faço para que na GUI, ao clicar em "Mostrar Caes", chame o método "mostrarCaes" da classe Cao? Tentei fazer isso no entanto as mensagens de diálogo não aceitam "void's".

E para criar um objecto do tipo Cao e respetivos valores das variáveis (com input do user), através da GUI, como faço?

Devo utilizar outra estratégia?

Posted

Tens aí um bom exemplo para mostrar por que é que não deves fazer prints nas classes que implementam a lógica da aplicação.

Tu meteste um print para o System.out, mas agora estás a fazer uma GUI, que obviamente não se baseia no System.out, e dá asneira. Essa classe devia devolver uma lista de valores. Depois na classe que trata da interface com o utilizador, decides como apresentar a lista de valores. Se estás a fazer uma GUI, à partida não vais fazer prints.

Para ajuda mais concreta, vais ter que indicar que tipo de bibliotecas/abordagens estás a usar para criar a GUI.

  • Vote 1
Posted (edited)

Supostamente a GUI não precisa de conhecer a tua classe Cao, o que não quer dizer que não possa conhecer se te facilitar o trabalho, mas isto implica que a GUI depois não fique portável para outros projetos.

Tu para mostrar os resultados da classe Cao na Gui podias fazer algo como ter uma Classe Interface que tem todos os métodos que tu queres utilizar na GUI.

Interface IFachada{
 public String mostraCaes();
}

Depois terias de ter uma classe que extenda a IFachada, e é nesta classe que tu metes todos os métodos que vais querer utilizar na GUI

public class Fachada implements IFachada{
 public String mostraCaes(){
	 //obtens o objeto Cao
	 return cao.mostraCaes();
 }
}

Assim a interface vai interagir com a classe IFachada e vai receber uma String, e fazes com esse resultado o que quiseres na GUI.

Isto é uma forma utilizando um padrão.

Caso tu pretendas de uma forma rápida, basta na GUI acederes ao objeto Cao e chamares o metodo mostraCaes() mas não podes usar o system.out, pois isso não te vai escrever nada na GUI, terás de retornar algum valor para depois apresentares em algum componente na GUI.

Tu para criares o objeto Cao com input do User, terás de ter uma janela ou frame com um formulário por exemplo com campos para o user preencher, depois terás um botão para guardar esses dados, é no evento desse botão que tu vais ler os dados e preencher o objeto Cao.

(Caso utilizasses a fachada de comunicação terias de ler os dados dos input e no evento do botão chamar um método da IFachada que te recebesse esses dados e depois na lógica cria-se o objeto cão, assim a GUI não conhecia a classe cão).

Edited by FQueiros
  • Vote 1
Posted (edited)

Obrigado por ambas as respostas.

Já entendi como se criam objetos usando a GUI, já os consigo criar. No entato, como é que faço para adicionar os elementos criados na minha GUI a um ArrayList da classe "ListaCaes" para posteriormente, nouta janela, os imprimir? Relembro que a classe "ListaCaes" (onde eu tenciono ter o tal ArrayList) e a GUI estão em packages distintos.

Edited by przero
Posted (edited)

após teres um objeto ListaCaes criado basta teres um arrayList do tipo ListaCaes e adicionares o objeto ao array.

ex:

ArrayList<ListaCaes> lista = new Arraylist();
lista.add(Objeto lista cães que criaste);

Se a tua duvida era como adicionar o objeto cão ao objeto ListaCaes podes criar um metodo dentro da classe ListaCaes, em que recebe o objeto Cao e guarda-o nos atributos dessa classe, para depois quando acederes a esse objeto ListaCaes teres lá o Cão e outros atributos que possas necessitar.

Agora se a tua dúvida era, criar uma lista de objetos cao, podes simplesmente criar o ArrayList do tipo Cao, sem necessitares da classe ListaCaes. E o teu arraylist vai guardar todos os caes criados.

Era isto que tinhas dúvidas?

posso não ter percebido a tua dúvida. 🙂

Edited by FQueiros
  • Vote 1
Posted

Obrigado pela resposta.

A minha duvida não era como criar a ArrayList propriamente dito, eu não fui muito específico.

Entretanto acho que já conseguir resolver esta questão. Resolvi criar uma ArrayList dentro da própria classe GUI em vez de recorrer às classes lógicas (backend), penso que não haja problema em tal porque está a facilitar-me imensamente o raciocínio 🙂

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.